モデルの関連付けについて質問があります。次のアプリケーションについて考えてみます。毎月、ユーザーに新しい質問があります。これらには、この質問に関するヒントを提供する機能があり、他のユーザーには、このヒントに反応する機能があります。私のモデル設定は次のようになります。
Users hasMany Tips, Reactions
Tips belongsTo User
Tips hasMany Reactions
Reactions belongsTo User, Tip
今、私はすべてのユーザーからその質問に関するすべてのヒントを得たいと思います。私はヒントテーブルですべてを簡単に見つけて、ユーザーと反応に関連するすべてのヒントを返します。ただし、反応にはユーザーが含まれていません。これは明らかに非常に重要です。
Cakeは、検索結果をすべて2つのクエリに自動的に変換します。1つはユーザーを結合するtipsテーブルにあり、もう1つはreactionsテーブルにありますが、users-tableには結合がありません。これが必要です。
だから私の質問は:なぜユーザーテーブルが反応に参加しないのですか、そしてどうすればこれを解決できますか?
コード:
ユーザーモデル:
public $hasMany = array('Tip', 'Reaction');
ヒントモデル:
public $hasMany = array('Reaction' => array(
'foreignKey' => 'tip_id'
));
public $hasOne = array('User' => array(
'fields' => array(
'User.id, User.first_name, User.last_name'
),
'foreignKey' => 'id'
));
反応モデル:
public $belongsTo = array('Tip', 'ReactionUser' => array(
'className' => 'User',
'foreignKey' => 'id'
));
コントローラ:
$tips = $this->Tip->find('all');
出力:
array(
(int) 0 => array(
'Tip' => array(
'id' => '1',
'user_id' => '1',
'question_id' => '1',
'tip' => 'Testing da new datavbase',
'votes' => '0',
'approved' => '1',
'pic' => '',
'created' => '2012-05-18 09:22:56'
),
'User' => array(
'id' => '1',
'first_name' => 'Bart',
'last_name' => 'De Bock'
),
'Reaction' => array(
(int) 0 => array(
'id' => '1',
'tip_id' => '1',
'user_id' => '1',
'reaction' => 'lorem ipsum',
'votes' => '0',
'approved' => '1',
'pic' => '',
'created' => '0000-00-00 00:00:00'
)
)
),
(int) 1 => array(
'Tip' => array(
'id' => '2',
'user_id' => '2',
'question_id' => '1',
'tip' => 'Test',
'votes' => '0',
'approved' => '1',
'pic' => '',
'created' => '2012-05-18 10:22:51'
),
'User' => array(
'id' => '2',
'first_name' => 'Deborah',
'last_name' => 'Rochtus'
),
'Reaction' => array(
(int) 0 => array(
'id' => '2',
'tip_id' => '2',
'user_id' => '3',
'reaction' => 'Say whaat?',
'votes' => '2',
'approved' => '1',
'pic' => '',
'created' => '2012-05-18 10:33:32'
),
(int) 1 => array(
'id' => '3',
'tip_id' => '2',
'user_id' => '4',
'reaction' => 'Hmmm..',
'votes' => '0',
'approved' => '1',
'pic' => '',
'created' => '2012-05-18 10:33:44'
)
)
)
)
ご覧のとおり、これらのリアクションには関連するユーザーが含まれていません...
ご協力いただきありがとうございます!