laravel - 在 Laravel (Eloquent) 中为子查询/连接查询自动插入表名
问题描述
这是我的查询:
PHP
public function find(array $filter = []) : Collection
{
return $this->entity::where($filter)->join('cases_has_services', function ($join) {
$join->on('cases_has_services.cases_id', 'checklists.cases_id');
$join->on('cases_has_services.services_id', 'checklists.item_id');
})->select('checklists.*', 'cases_has_services.quantity')->get();
}
我收到下一个错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where
clause is ambiguous (SQL: select `checklists`.*,
`cases_has_services`.`quantity` from `checklists` inner join
`cases_has_services` on `cases_has_services`.`cases_id` =
`checklists`.`cases_id` and `cases_has_services`.`services_id` =
`checklists`.`item_id` where (`id` = 352))
所以我稍微修正了我的代码:
public function find(array $filter = []) : Collection
{
// TODO fix this
foreach ($filter as $field => $value) {
unset($filter[$field]);
$field = 'checklists.' . $field;
$filter[$field] = $value;
}
return $this->entity::where($filter)->join('cases_has_services', function ($join) {
$join->on('cases_has_services.cases_id', 'checklists.cases_id');
$join->on('cases_has_services.services_id', 'checklists.item_id');
})->select('checklists.*', 'cases_has_services.quantity')->get();
}
但我认为这不是一个好习惯。那么,是否有任何原生 laravel 路径可以在使用连接的查询中自动插入表名?我的意思是,如何避免使用这部分代码,因为它有点 hacky:
foreach ($filter as $field => $value) {
unset($filter[$field]);
$field = 'checklists.' . $field;
$filter[$field] = $value;
}
解决方案
将您的 $filter 变量更改为:
$filter = ['checklists.id' => 123]
推荐阅读
- javascript - 带有邮递员 UnhandledPromiseRejectionWarning 的 Req.body:TypeError:无法解构“req.body”的属性“id”,因为它未定义
- c++ - 如果设置了 UDP 源地址,WSASendMsg 返回错误
- codeigniter - 如何在 Codeigniter4 中更改控制器上的数据库用户?
- typo3 - sf_event_mgt 的路由增强器
- javascript - 用字符串寻址变量
- python - 更改 Altair 图例中的形状颜色
- php - 使用 $_GET 的 Symfony knp_paginator 查询
- mysql - MySQL SELECT user-defined var AS alias WHERE user-defined var 等于?
- amazon-web-services - AWS EC2 - 开发人员动态 ip 权限
- javascript - 如何在 ionic/react 中关闭 IonPopover?