好吧,我对关联的工作方式有一些疑问,特别是belongsTo,这是我的设置:
文章可以有多个类别
类别可以属于多篇文章
所以在我的数据库中我有 3 个表:
articles
、categories
和连接表 articles_categories
表格/ArticlesTable.php:
public function initialize(array $config)
{
$this->addBehavior('Timestamp');
$this->table('articles');
$this->belongsTo('Users');
$this->belongsToMany('Categories', [
'through' => 'ArticlesCategories',
'alias' => 'Categories',
'foreignKey' => 'article_id',
'joinTable' => 'articles_categories',
'targetForeignKey' => 'category_id'
]);
}
表格/类别Table.php:
public function initialize(array $config)
{
$this->table('categories');
$this->displayField('name');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsToMany('Articles', [
'through' => 'ArticlesCategories',
'alias' => 'Articles',
'foreignKey' => 'category_id',
'joinTable' => 'articles_categories',
'targetForeignKey' => 'article_id'
]);
}
表格/ArticlesCategoriesTable.php:
public function initialize(array $config)
{
$this->belongsTo('Articles');
$this->belongsTo('Categories');
}
现在在 view
操作 CategoriesController.php 中,我可以概述特定类别,并且我需要检索与该类别相关的一些文章。
做这样的事情的正确方法是什么?这是我所拥有的:
public function view($id = null)
{
$category = $this->Categories->find('all',['limit'=>1])->where(['Categories.id' => $id])->contain(['Articles']);
$this->set(['category'=> $category]);
}
它可以完成这项工作,但我还需要能够限制相关文章的数量..
最佳答案
您可以修改用于加载关联模型的查询对象:
$category = $this->Categories->find('all',['limit'=>1])
->where(['Categories.id' => $id])
->contain(['Articles' => function($q) {
$q->limit(10);
return $q;
}
]);
编辑:或者你可以这样做
$category = $this->Categories->get($id,
[
'contain' => [
'Articles' => function($q) {
$q->limit(10);
return $q;
}
]);
或者如果您想要没有类别数据的文章,您可以使用匹配
$articles = $this->Categories->Articles->find()
->matching('Categories', function ($q) use $id{
return $q->where(['id' => $id])
->limit(10);
我没有测试最后一个,但我认为类似的东西应该有效
但是正如您所看到的,复杂性或多或少相同
关于php - CakePHP 3 连接表关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33028208/