【发布时间】:2017-09-08 02:47:32
【问题描述】:
我阅读了cookbook,但我不知道如何在一个查询中组合matching() 和orWhere()。
示例:我有属于Album 的Photo。两者都有active 字段。所以我正在尝试编写一个findInactive() 方法。 “非活动”照片的active 字段为false或与active 字段为false 的相册匹配。
类似这样的:
public function findInactive(Query $query, array $options)
{
$query->matching('Albums', function ($q) {
return $q->where(['Albums.active' => false]);
})
->orWhere(['Photos.active' => false])
->enableAutoFields(true);
return $query;
}
但这不起作用:
'SELECT [...] FROM photos Photos INNER JOIN photos_albums Albums ON (Albums.active = :c0 AND Albums.id = (Photos.album_id)) WHERE Photos.active = :c1'
怎么办?谢谢。
编辑
也许一个可能的解决方案是使用contain():
$query->contain(['Albums => ['fields' => ['active']]])
->where(['Photos.active' => false])
->orWhere(['Albums.active' => false]);
但是不能用matching()或者innerJoinWith()吗?
【问题讨论】:
-
如果
PhotobelongsToAlbum那么你的最后一个解决方案似乎是最简单的一个。包含创建 JOIN。我认为不需要使用其他解决方案
标签: cakephp cakephp-3.4