Laravel eloquent使用数据透视表

时间:2018-03-16 22:11:57

标签: laravel laravel-eloquent

我有一种情况来访问订单当前状态:slug =" new"

以下是该方案:

  1. 状态:使用cols [id,title,slug]

  2. 透视 Order_Status :使用cols [id,order_id,status_id]

  3. 订单:使用cols [id,priority,client_id,...]

  4. 其中, 1个订单可以有很多状态

      

    现在我想获得该订单最后状态的所有订单   是"新"

    我不清楚是否应该使用状态模型获取所有订单或获取订单并应用范围。

    $status = Status::where('slug','new')->first();
    $orders = $status->orders()->?
    

    或应该做这样的事情:

    $status = Status::where('slug','new')->first();
    $orders = Order::withCurrentStatus($status->id)->?
    

    意味着我也不知道如何完成此功能。

      

    我必须使用eloquent而不是自定义原始查询。

    如果有人能指导我,我将感激不尽。

1 个答案:

答案 0 :(得分:0)

您可以在热切的加载查询中定义条件

 $statuses = Status::where('slug', 'new')
    ->with([
        "orders" => function ($query) {
            $query->where('some_column', '=', 'possible-value'); // single condition 
                                                 //or you can also pass array on ->where()
        }
    ])->get();

// dd($statuses); -> you can then loop through statuses and get each 
//                     orders by $status->orders

如果您的orders没有任何条件,只需加载即可

$statuses = Status::where('slug', 'new')->with('orders')->get();