在我的网球的应用程序,我的'匹'表了两个球员(显然).我用player1_id和player2_id作为一种方式,以跟踪用户标识。我还没有包括一个user_id外键。

还有一个"用户"表在这里我想到拉球员的名字。

因为'匹'具有一个以上的用户和用户已经多于一个模型,我想知道,如果下面模型的配置将工作:

我已经安装的用户模型是这样的:

var $name = 'User';
var $hasMany = array(
'Match' => array(
'className' => 'Match',
'foreignKey' => array( 'player1_id', 'player2_id'),
'dependent' => true,
)

和匹配的模式是这样的:

var $name = 'Match';
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' =>  'user_id',
'conditions' => '',
)

我需要显示用户姓名为每个球员在user_id=player1_id或player2_id.将这项工作?以外的关键利用一系列?并且可以一个模型操作使用一个"或"在搜索?

或者是有更好的方式结构表(喜欢一个比赛、或可能是一个小组会议)与多个用户?

干杯, 保罗

有帮助吗?

解决方案

我不认为一系列作为一个外国的关键在于用户>匹配的关系会的工作,但是,有一次我从来没有尝试过。单人匹配>户的关系 user_id 作为外国不会的工作,因为,正如你所说,外国id不存在。

在概念上最清洁的方式将是一个适当的hasandbelongstomany关联关系。毕竟,一个比赛有许多球员和球员有可能多的比赛。所以你真的在寻找一个多对多关系。

伪造它与belongsTo/hasMany关系,你会需要这样做:

// user model
var $hasMany = array(
   'MatchAsPlayer1' => array(
       'className'  => 'Match',
       'foreignKey' => 'player1_id',
   ),
   'MatchAsPlayer2' => array(
       'className'  => 'Match',
       'foreignKey' => 'player2_id',
   )
);

// match model
var $belongsTo = array(
    'Player1' => array(
        'className'  => 'User',
        'foreignKey' =>  'player1_id'
    ),
    'Player2' => array(
        'className'  => 'User',
        'foreignKey' =>  'player2_id'
    )
);

丑陋的一部分是在与用户模型,在那里你会接收有关的分成比赛 ['MatchAsPlayer1']['MatchAsPlayer2'].你可以做一些诡计的 afterFind 回到合并那些,但是它不是一个很好的解决方案的整体。只是去hasandbelongstomany关联.:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top