【发布时间】:2020-06-21 16:42:07
【问题描述】:
我正在尝试在我的最后一行 HasMany 关系上使用 Laravel Eloquent whereHas 来查找上次更新状态但是这个查询让我所有的操作都没有顺序。 我看到 this 。我想在 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'));
}
}
【问题讨论】:
-
如果您想按关系订购,我相信您需要使用联接。否则,它将始终按最新 ID 订购您的订单。看看这个:stackoverflow.com/questions/48321076/…
-
解释你想要什么?
-
我想通过 orderAction 表中最后添加的行中的 state_to 字段过滤订单,因为我的订单最后状态存储在那里
-
$items = Order::when(isset($request->filter_status),function($query)use($request){ $query->select('orders.*', DB: :raw('(select state_to from order_action where orders.id = order_action.order_id order by id desc limit 1) as state_to ' ) ); $query->where('state_to',$request->filter_status); })- >latest('id')->get();此代码返回未知列 state_to