如何解决 laravel 中不明确的列问题?
Posted
技术标签:
【中文标题】如何解决 laravel 中不明确的列问题?【英文标题】:How to fix ambiguous column issue in laravel? 【发布时间】:2020-05-05 13:08:36 【问题描述】:我创建了一个全局范围来获取只有列状态 = 1 的数据。它运行良好。但我在代码中遇到了这个问题,我不知道如何解决这个问题:
“消息”:“SQLSTATE [23000]:完整性约束违规:1052 where 子句中的列“状态”不明确(SQL:选择
items
.*,item_orders
.order_id
aspivot_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 个订单,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);
【问题讨论】:
【参考方案1】:表示status
在多个表中,您需要通过表名指定表的列,
像这样:
$builder->where('item_orders.status', '=', 1);
// In your case: you can use your $model to get the table's name
$builder->where($model->getTable().".status", 1);
【讨论】:
以上是关于如何解决 laravel 中不明确的列问题?的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE [23000]:完整性约束违规:1052 列“created_at”在 order 子句中不明确 Laravel 5.5