これはCakePHPの関係は、ユーザのグループのために使用する必要がありますか? foreign_IDのために使用配列をhaveManyことができますか?

StackOverflow https://stackoverflow.com/questions/2390737

質問

私のテニスのアプリケーションでは、私の「マッチ」の表は、(明らかに)二人の選手を持っています。私は、ユーザーIDを追跡する方法としてplayer1_idとplayer2_idを使用しました。でも、私はuser_idは外部キーを含めていません。

私はからプレイヤーの名前を引くしたい「ユーザー」テーブルもあります。

「試合」は、複数のユーザーを持っていると、次のモデル構成が動作する場合、ユーザーは複数のモデルが、私は思ったんだけどしているのでます:

Iましセットアップ、このようなユーザモデルます:

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の最後の名前を必要としています。この作品は、ウィル?外部キーは、アレイを使用することはできますか?缶モデル操作用のAN「または」検索する際に?

あるいは、複数のユーザーで(試合のように、またはグループ会合することができる)、テーブルを構築するためのより良い方法はありますか?

乾杯、 ポール

役に立ちましたか?

解決

私は、ユーザーの外部キーとして配列>はマッチ関係がうまくいくとは思わないが、その後、再び、私は試したことがありません。外国人の意志として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