我拥有belongsToMany关系的用户和课程表。用户表
$this->belongsToMany('Courses', [
'foreignKey' => 'user_id',
'targetForeignKey' => 'course_id',
'joinTable' => 'courses_users'
]);
和CoursesTable
$this->belongsToMany('Users', [
'foreignKey' => 'course_id',
'targetForeignKey' => 'user_id',
'joinTable' => 'courses_users'
]);
现在,我想用user_id获取课程。在我的CoursesController中,我尝试了
public function myCourses()
{
$id = $this->Auth->user('id');
$courses = $this->Courses->find('all',
['contain' => ['Users'],
'condition' => ['Courses.user_id' => $id]
]);
$this->set('courses', $courses);
}
当我使用此代码调试($ courses)时,我得到'(help)'=> '这是一个Query对象,用于执行或迭代结果。信息。我正在搜索信息,并试图做了很多个小时,但我无法做到。如何使用user_id获取课程数据?提前谢谢。
答案 0 :(得分:3)
如果它与courses_users
的联接表具有并且属于多人(HABTM)关联,那么您甚至不应该在user_id
字段中添加Courses.user_id
字段课程表。
所以现在我们已经确定你不能做你正在尝试的事情( $courses = $this->Courses->find('all',
['contain' => ['Users'],
//'condition' => ['Courses.user_id' => $id]
]);
),我们可以看看你认为你在尝试的事情:
matching()
这表示"查找所有课程以及与这些课程相关的所有用户"。
但你真正想要的(我相信)是:"找到属于这个特定用户的所有课程"。
为此,您需要使用$query = $articles->find();
$query->matching('Tags', function ($q) {
return $q->where(['Tags.name' => 'CakePHP']);
});
。
一个相当常见的关联查询案例是查找记录 '匹配'特定的相关数据。例如,如果你有'文章 belongsToMany标签'你可能想要找到的文章 CakePHP标签。使用ORM非常简单 CakePHP的:
$query = $courses->find();
$query->matching('Users', function ($q) use ($id) {
return $q->where(['Users.id' => $id]);
});
所以在你的情况下,它会是这样的:
index.vash