Kim*_*cks 1 php orm cakephp-3.0
这是我在DynamicViewsTable.php中的自定义finder方法
public function findAccessibleByUser(Query $query, array $options)
{
if (empty($options['User']['id'])) {
throw new Exception("Current User not set", 1);
}
$query->select(['DynamicViews.id', 'DynamicViews.title', 'UsersAccessDynamicViews.ordinal_ranking'])
->contain(['UsersAccessDynamicViews'])
->where([
'UsersAccessDynamicViews.user_id' => $options['User']['id'],
])
->order(['UsersAccessDynamicViews.ordinal_ranking' => 'ASC']);
return $query;
}
Run Code Online (Sandbox Code Playgroud)
我一直得到的错误是:
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'UsersAccessDynamicViews.ordinal_ranking' in 'field list'
Run Code Online (Sandbox Code Playgroud)
并且错误页面中显示的查询是:
SELECT DynamicViews.id AS `DynamicViews__id`, DynamicViews.title AS `DynamicViews__title`, UsersAccessDynamicViews.ordinal_ranking AS `UsersAccessDynamicViews__ordinal_ranking` FROM dynamic_views DynamicViews WHERE UsersAccessDynamicViews.user_id = :c0 ORDER BY UsersAccessDynamicViews.ordinal_ranking ASC
Run Code Online (Sandbox Code Playgroud)
DynamicViews拥有许多UsersAccessDynamicViews
虽然你可以使用包括任何类型associaition的contain(),配套的东西确实只对工作1:1和n:1协会,即hasOne和belongsTo,因为这些是唯一的关联,其中contain()在相关表格将加入.
出于所有其他目的,您将不得不使用任何一种matching()(需要最近的开发快照才能在结合使用时工作contain(),特别是对于更复杂的组合)
$query
->select(['DynamicViews.id', 'DynamicViews.title', 'UsersAccessDynamicViews.ordinal_ranking'])
->contain(['UsersAccessDynamicViews'])
->matching('UsersAccessDynamicViews', function ($q) use ($options) {
return $q->where([
'UsersAccessDynamicViews.user_id' => $options['User']['id']
]);
})
->order(['UsersAccessDynamicViews.ordinal_ranking' => 'ASC']);
Run Code Online (Sandbox Code Playgroud)
手动加入相关表:
$query
->select(['DynamicViews.id', 'DynamicViews.title', 'UsersAccessDynamicViews.ordinal_ranking'])
->contain(['UsersAccessDynamicViews'])
->innerJoin('UsersAccessDynamicViews', [
'UsersAccessDynamicViews.dynamic_view_id = DynamicViews.id',
'UsersAccessDynamicViews.user_id' => $options['User']['id']
])
->order(['UsersAccessDynamicViews.ordinal_ranking' => 'ASC']);
Run Code Online (Sandbox Code Playgroud)
或从另一个表查询.
也可以看看
| 归档时间: |
|
| 查看次数: |
2663 次 |
| 最近记录: |