我有两个自定义查找方法,我想将它们联合起来。
public function findInGroup(Query $query, array $options)
{
return $query
->matching(
'Groups',
function ($q) {
return $q->where(['Groups.id' => 1]);
}
);
}
public function findAsUser(Query $query, array $options)
{
return $query
->matching(
'Users',
function ($q) {
return $q->where(['Users.id' => 1]);
}
);
}
由于select
调用,这两种方法会生成不同的matching
列表。所以我不能把他们联合起来......
我不需要选择Groups__id
等字段。
有没有办法告诉matching
它不应该将匹配的数据字段添加到创建的选择字段列表中?
答案 0 :(得分:1)
你有两个选择“
这将使查询构建器省略关联中的字段:
$query
->find('iGroup', $options)
->find('asUser', $options)
->select($table->schema()->columns());
通过专门选择您需要的列,您将省略可以连接的关联列,即匹配的列。
CakePHP 3.1引入了一个名为innerJoinWith()
的新函数,它与matching()
完全相同,但它不会从关联中选择任何列:
public function findInGroup(Query $query, array $options)
{
return $query
->innerJoinWith(
'Groups',
function ($q) {
return $q->where(['Groups.id' => 1]);
}
);
}
public function findAsUser(Query $query, array $options)
{
return $query
->innerJoinWith(
'Users',
function ($q) {
return $q->where(['Users.id' => 1]);
}
);
}