我做了一个全局作用域来获取列状态= 1的数据。它工作得很好。但是我在代码中遇到了这个问题,我不知道如何解决这个问题:
“留言”:“SQLSTATE[23000]:违反完整性约束:1052 where子句中的列”status“不明确(SQL:选择items
.*,item_orders
. order_id
作为pivot_order_id
,item_orders
. item_id
作为pivot_item_id
,item_orders
. quantity
作为pivot_quantity
从items
内部连接item_orders
到items
. id
= item_orders
. item_id
,其中item_orders
. order_id
= 1且status
= 1 order by id
desc)",
下面是我的代码:
$order = Order::find($id);
if (is_null($order) || empty($order))
return ResponseHelper::customizedResponse(false,'4500','No Order is available');
$user =$order->user_id;
$place = Place::where('id',$order->place_id)->first();
$orderItems = ItemOrder::where('order_id',$order->id)->get()->toArray();
$orderArray = [];
$itemQ = [];
foreach ($orderItems as $orderItem)
{
$orderArray[] =$orderItem['item_id'];
$itemQ[] = $orderItem['quantity'];
}
$items = Item::whereIn('id',$orderArray)->get();
$itemP = [];
foreach ($items as $item)
{
$itemP[]= $item->price;
}
$totalItem = array_map(function ($price,$quantity){
return $price * $quantity;
},$itemP , $itemQ );
$total = array_sum($totalItem);
$customer = User::find($user);
$address = Address::where('user_id',$customer->id)->first();
return response()->json(['order'=>$order,'place'=>$place,'items'=>$items,'customer'=>$customer,'address'=>$address,'total'=>$total]);
字符串
全球范围:
public function apply(Builder $builder, Model $model)
{
if (str_contains(request()->route()->uri(),'api')) {
$builder->where('status', '=', 1);
}
}
型
2条答案
按热度按时间au9on6nz1#
这意味着你在多个表中有
status
,你需要通过表名指定表的列,就像这样:
字符串
zysjyyx42#
一种完全动态和内置的方法是使用
Eloquent\Model::qualifyColumn()
方法。字符串
不幸的是,它不是静态的,但有一个解决办法的基础上的“技巧”,泰勒建议在这里。
型
当您正在建立链接,但手边没有模型的执行严修时,这会很有用。
这将通过以下几种方式为您的代码提供未来的支持:
1.如果您更改了表名,此操作仍然有效。(不过,它对更改列名没有帮助。)
1.最后,您可能会将另一个表添加到与查询中的现有表共享列名的联接中。使用此技术可以避免出现此问题中的确切情况。