私の CakePHP での関連付けは少しずれています。これが問題です。私はusers
テーブルとテーブルを持っていcomments
ます。送信を取得するときに、Comment.user_id == User.id を使用users
してテーブルにテーブルを結合したいと考えています。comments
コメント モデル:
class Comment extends AppModel {
var $name = 'Comment';
var $belongsTo = array('User');
var $hasMany = array(
'CommentsLike' => array(
'className' => 'CommentsLike'
),
'Comment' => array(
'className' => 'Comment'
)
);
var $hasAndBelongsToMany = array(
'User' => array(
'className' => 'User',
'joinTable' => 'comments',
'foreignKey' => 'Comment.user_id',
'associationForeignKey' => 'user_id'
),
'Submission' => array(
'className' => 'Submission'
)
);
ユーザー モデル:
class User extends AppModel {
var $name = 'User';
var $hasMany = array('Comment');
var $hasAndBelongsToMany = array(
'Comment' => array(
'className' => 'Comment',
'joinTable' => 'comments',
'foreignKey' => 'Comment.user_id',
'associationForeignKey' => 'user_id',
),
'Submission' => array(
'className' => 'Submission',
'order' => 'Submission.created DESC'
)
);
をつかむとsubmission
、それに対するすべてのコメントが取得されますが、users
テーブルに参加しません。これは私が望むものです
提出モデル:
class Submission extends AppModel {
var $name = 'Submission';
var $belongsTo = array(
'User' => array(
'className' => 'User'
)
);
var $hasMany = array(
'Comment' => array(
'className' => 'Comment',
'order' => 'Comment.created DESC',
'conditions' => array(
'Comment.deleted' => 0
)
),
'SubmissionsVote' => array(
'className' => 'SubmissionsVote'
),
'SubmissionThumbnails' => array(
'className' => 'SubmissionThumbnails'
)
);
提出物を検索すると、次のように返されます。
[Submission] => Array
(
// removed for sake of stackoverflow length
)
[User] => Array
(
[id] => 2
[username] => bob_cobb
)
[Comment] => Array
(
[0] => Array
(
[id] => 1
[submission_id] => 112
[comment] => this is a test comment
[user_id] => 2
[created] => 5 minutes ago
[deleted] =>
[parent_id] =>
)
)
ご覧のとおり、または同様のもの[Comment][0]
も必要[Comment][0][User]
です。
なぜ私はこれが欲しいのですか?comments
シンプル:テーブルから user_id の外部キーでコメントした人のユーザー名を取得したい。私はドキュメントとチュートリアルを読みましたが、これに近づいていると確信していますが、何が私を妨げているのかわかりません.
テーブルのスクリーンショットは次のcomments
とおりです。
users
テーブル構造
のスクリーンショットを次に示します。