0

我正在尝试在我的最后一行 HasMany 关系上使用 Laravel Eloquent whereHas 来查找上次更新状态但是这个查询让我所有的操作都没有顺序。我看到了这个。我想在 lastAction 上使用 where 查询,这对我不起作用。谢谢

我的 Order.php 文件

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    protected $table = "orders";
    protected $guarded = [];
    
    public function action()
    {
         return $this->hasMany(OrderAction::class, 'order_id');
    }
}

我的 OrderController.php 文件

<?php

namespace App\Http\Controllers;


use Illuminate\Http\Request;

class OrderController extends Controller
{
    public function index(Request $request)
    {
        $items = Order::where(function ($query) use ($request) {
            if ( !empty($request->filter_status )) {
                $query->whereHas('action',function($query1) use ($request){
                    $query1->where('state_to',$request->filter_status);
                });
            }})->latest('id')->paginate(20);

        $items->appends($request->query());
        return view('order.index',compact('items'));
    }
}
4

1 回答 1

0

应该这样做(您可能需要调整代码以适合您的应用程序):

$items = Order::when(isset($request->filter_status), function($query) use ($request) { 
   $orderActions = OrderAction::selectRaw('MAX(id), state_to')
       ->groupBy('order_id');

   $query->joinSub($orderActions, 'order_actions', function ($join) {
       $join->on('orders.id', '=', 'order_actions.order_id');
     }) 
     ->where('state_to', $request->filter_status);  
 })
 ->latest('id')
 ->paginate(20);

参考: https : //laravel.com/docs/7.x/queries#joins - 子查询连接

于 2020-06-20T16:39:13.680 回答