Laravel Красноречие, где есть проблема - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь использовать Laravel Eloquent whereHas в моей последней строке отношения HasMany для поиска статуса последнего обновления. Но этот запрос дает мне все действия не по порядку. Я вижу это . Я хочу использовать запрос where в lastAction, и это не сработает для меня. спасибо

Мой заказ. 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'));
    }
}

1 Ответ

0 голосов
/ 20 июня 2020

Что-то вроде этого должно сработать (вам может потребоваться настроить код, чтобы он соответствовал вашему приложению):

$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 - Присоединение к подзапросу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...