为 belongsToMany CakePHP 3 分页的条件
Posted
技术标签:
【中文标题】为 belongsToMany CakePHP 3 分页的条件【英文标题】:Conditions to paginate for belongsToMany CakePHP 3 【发布时间】:2015-06-26 13:27:40 【问题描述】:我有 Semesters、Disciplines 表和一个联合表 Semesters_Disciplines。我想在 DisciplinesController 中创建一个操作索引,其中以 term_id 作为参数,该索引仅列出属于该学期的学科,并在参数中传递 id。我试过这个:
public function index($semester_id)
$options = ['semester_id' => $semester_id];
$this->paginate = ['conditions' => $options];
$this->set('disciplines', $this->paginate($this->Disciplines));
$this->set('_serialize', ['disciplines']);
【问题讨论】:
您的测试结果是什么,您预期或未预期会发生什么? Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'semesters_id' in 'where Clause' 嗯...'conditions' 只接受与控制器型号相关的条件。 .. 【参考方案1】:您必须使用使用匹配或连接的查询才能过滤非 1:1
/n-1
关联。
您可以通过将查询直接传递给paginate()
方法来做到这一点
// ...
$this->set('disciplines', $this->paginate(
$this->Disciplines
->find()
->matching('Semesters', function(\Cake\ORM\Query $q) use ($semester_id)
return $q->where([
'Semesters.id' => $semester_id
]);
)
->group(['Disciplines.id'])
));
// ...
或使用自定义查找器。
// ...
$this->paginate = [
'finder' => [
'semesters' => [
'semester_id' => $semester_id
]
]
];
$this->set('disciplines', $this->paginate($this->Disciplines));
// ...
// DisciplinesTable
public function findSemesters(\Cake\ORM\Query $query, array $options)
$query
->matching('Semesters', function(\Cake\ORM\Query $q) use ($options)
return $q->where([
'Semesters.id' => $options['semester_id']
]);
)
->group(['Disciplines.id']);
return $query;
另见
Cookbook > Pagination > Using Controller::paginate() Cookbook > Retrieving Data and Result Sets > Custom Finder Methods Cookbook > QueryBuilder > Filtering by Associated Data Cookbook > QueryBuilder > Adding Joins【讨论】:
以上是关于为 belongsToMany CakePHP 3 分页的条件的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP 3 保存 BelongsToMany 关联未知类型“”错误
在 CakePHP 3 中保存多个 belongsToMany 关联
CakePHP 3中关于belongsToMany关联的问题
如何在 CakePHP 3.x 中保存 belongsToMany 以进行编辑操作?