Cakephp 传递条件以包含抛出 InvalidArgumentException
Cakephp Passing Conditions to Contain throws InvalidArgumentException
我想通过将条件(限制)传递给 ->contain('ProductCategory')
来限制合并结果
$products = $ProductTable
->find('all')
->where($where)
->contain(
[
'ProductPrice' => [
'ProductPricetier'
],
'ProductCategory' => [
'sort' => ['ProductCategory.id DESC']
]
],
function (Query $q) {
return $q->limit(1);
}
);
抛出异常:
Cannot set containments. To use $queryBuilder, $associations must be a string
如何限制单个关联的结果?
我不确定您的示例的格式是否与您最初发布时的格式相同,但是按照我在其中编辑的正确格式,您应该会看到您没有将闭包作为包含的选项,但作为 contain()
方法的第二个参数,它仅在第一个参数是字符串(如错误消息中所述)时有效,特别是关联别名。
你需要做的例子:
->contain([
'ProductPrice' => [
'ProductPricetier'
],
'ProductCategory' => function (Query $q) {
return $q
->order([
'ProductCategory.id' => 'DESC'
])
->limit(1);
},
]);
或
->contain('ProductCategory', function (Query $q) {
return $q
->order([
'ProductCategory.id' => 'DESC'
])
->limit(1);
});
也就是说,这可能不会像您想象的那样工作,因为 contain 中的限制在每个 row/group 基础上不起作用,相反它将被忽略 belongsTo
和 hasOne
关联,对于 hasMany
和 belongsToMany
关联,它将应用于整个辅助关联数据查询,限制检索的整体关联记录,即它将 return 总共只有 1 条关联记录,而不是每个 row/group.
1 条
检查例如 How to limit contained associations per record/group? 以获取有关如何根据 row/group.
限制关联的信息
另见
我想通过将条件(限制)传递给 ->contain('ProductCategory')
$products = $ProductTable
->find('all')
->where($where)
->contain(
[
'ProductPrice' => [
'ProductPricetier'
],
'ProductCategory' => [
'sort' => ['ProductCategory.id DESC']
]
],
function (Query $q) {
return $q->limit(1);
}
);
抛出异常:
Cannot set containments. To use $queryBuilder, $associations must be a string
如何限制单个关联的结果?
我不确定您的示例的格式是否与您最初发布时的格式相同,但是按照我在其中编辑的正确格式,您应该会看到您没有将闭包作为包含的选项,但作为 contain()
方法的第二个参数,它仅在第一个参数是字符串(如错误消息中所述)时有效,特别是关联别名。
你需要做的例子:
->contain([
'ProductPrice' => [
'ProductPricetier'
],
'ProductCategory' => function (Query $q) {
return $q
->order([
'ProductCategory.id' => 'DESC'
])
->limit(1);
},
]);
或
->contain('ProductCategory', function (Query $q) {
return $q
->order([
'ProductCategory.id' => 'DESC'
])
->limit(1);
});
也就是说,这可能不会像您想象的那样工作,因为 contain 中的限制在每个 row/group 基础上不起作用,相反它将被忽略 belongsTo
和 hasOne
关联,对于 hasMany
和 belongsToMany
关联,它将应用于整个辅助关联数据查询,限制检索的整体关联记录,即它将 return 总共只有 1 条关联记录,而不是每个 row/group.
检查例如 How to limit contained associations per record/group? 以获取有关如何根据 row/group.
限制关联的信息另见