如何解决 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 as pivot_order_id, item_orders.item_id 作为pivot_item_id, item_orders.quantity 作为pivot_quantityitems 内部连接 ​​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 中不明确的列问题?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel关系列'id'在where子句中不明确

如何从 SQL Server 中不同行的列中取值?

SQLSTATE [23000]:完整性约束违规:1052 列“created_at”在 order 子句中不明确 Laravel 5.5

如何正确解组不同类型的数组?

如何减少 Laravel 中的列值

如何在laravel中使用逗号分隔值的列上使用'where'