【发布时间】:2016-09-09 20:31:32
【问题描述】:
目前我正在尝试实现时间线功能,该功能需要对两个相关表中创建的列进行排序并相应地更新父表(在我的情况下为图片)。
更具体地说,我有一个包含许多 cmets 的图片表。我想根据 cmets 和 Pictures 表的 created 列中的最新时间戳对图片进行排序。
我有以下查询,它检索必要的数据,但没有正确排序:
public function getPicturesAndCommentsOfUser($userId){
return $this->find()
->contain([
'Comments' => function ($q){
return $q
->contain(['Users' => function ($q) {
return $q->select($this->select);
}])
->order(['Comments.created' => 'ASC']);
},
'Users' => function ($q) {
return $q->select($this->select);
},
'Albums'
])
->matching('Albums.Users', function ($q) use ($userId) {
return $q
->where(['Users.id' => $userId]);
});
}
我的问题是如何结合 Pictures.created 和 Comments.created 的顺序。我已经尝试在最后一次匹配调用之后在 ->contain(['Comments']) 和链的最外部调用 order 函数。我似乎无法弄清楚如何将这两个表相互关联,以便我可以对它们进行排序。
此外,我在其他来源 (like this one) 中读到我可以使用 union 语句,但我能找到的关于该选项的所有信息都是它适用于不相关的表,而不是相关的。
谁能给我一些关于如何解决这个问题的指导?
【问题讨论】:
标签: sql cakephp orm cakephp-3.0