如何使用CakePHP3

时间:2017-07-15 23:20:23

标签: php cakephp cakephp-3.0

我拥有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获取课程数据?提前谢谢。

1 个答案:

答案 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']); });

根据the CakePHP book

  

一个相当常见的关联查询案例是查找记录   '匹配'特定的相关数据。例如,如果你有'文章   belongsToMany标签'你可能想要找到的文章   CakePHP标签。使用ORM非常简单   CakePHP的:

$query = $courses->find();
$query->matching('Users', function ($q) use ($id) {
    return $q->where(['Users.id' => $id]);
});

所以在你的情况下,它会是这样的:

index.vash