问题描述
获取与 Posts 模型关联的 Slug 的 contain
值。
我想按照检索到的 Slugs 表的 ID 对它们进行排序。
在 PostsController 中
/**
* Index method
*
* @return \Cake\Http\Response|null|void Renders view
*/
public function index()
{
$this->paginate = [
'limit' => 10,'contain' => ['Slugs'],'order' => [
'Slugs.id' => 'desc',],];
$posts = $this->paginate($this->Posts);
$this->set(compact('posts'));
}
检索到的值将按 ID 降序显示(asc)。
ID 按降序排列。
检查 $posts
中 dd($posts)
值的内容。
0 => App\Model\Entity\Posts {#163 ▼
#_accessible: array:6 [▶]
#_fields: array:6 [▶]
// ....
id: 1
title: "CakePHP"
user_id: 1
created: Cake\I18n\FrozenTime @1613560300 {#164 ▶}
modified: Cake\I18n\FrozenTime @1613560300 {#195 ▶}
users: array:2 [▼
0 => App\Model\Entity\Slug {#213 ▼
// ...
id: 1
name: "PHP7.2"
[new]: false
// ...
}
1 => App\Model\Entity\Slug {#224 ▼
id: 2
name: "CakePHP4"
// ...
我已经尝试了以下
'order' => [
'Posts.Slugs.id' => 'desc',
或
$posts = $this->paginate($this->Posts->find()->order(['Slugs.id']);
我怎样才能获得最好的结果?
解决方法
所以一个帖子有很多 Slug,当您在分页中加载帖子时(按帖子中的某个字段排序),您希望这些帖子中的 slug 按 id 排序?您应该可以使用容器中的 queryBuilder
参数执行此操作:
$this->paginate = [
'limit' => 10,'contain' => [
'Slugs' => [
'queryBuilder' => function (Query $q) {
return $q->order(['Slugs.id']);
}
],],];