Как исправить неоднозначную проблему с колонками в laravel? - PullRequest
0 голосов
/ 19 января 2020

Я сделал глобальную область, чтобы получать данные только со статусом столбца = 1. Это работало нормально. но я столкнулся с этой проблемой в своем коде и не знал, как решить эту проблему:

"message": "SQLSTATE [23000]: нарушение ограничения целостности: 1052 Столбец '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 заказ на id des c ) ",

Это мой код:

$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 Ответ

2 голосов
/ 19 января 2020

Это означает, что у вас есть 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...