我有一個用 Laravel 5.8 撰寫的在線商店專案,我可以正確地獲得這樣的最新訂單:
$orders = Order::query()->latest('orders.created_at');
在刀鋒處:
@forelse($orders as $order)
<tr>
...
</tr>
@empty
@endforelse
但現在我需要根據最新付款對資料進行排序。
我還定義了這兩個模型之間的一對多關系:
付款.php :
public function order()
{
return $this->belongsTo(Order::class, 'pay_ord_id', 'pay_id');
}
訂單.php :
public function payments()
{
return $this->hasMany(Payment::class, 'pay_ord_id', 'ord_id');
}
基本上每筆付款都有一個名為pay_ord_id訂單 ID的記錄。
我需要使用以下條件對資料進行排序:
1- 獲取最新訂單
2- 轉到
payments表格并使用檢索到的訂單 ID搜索資料3- 根據最新
payments資料對資料進行排序
那么在這種情況下,如何根據最新的訂單 ID 正確獲取最新的付款呢?
更新:
$orders = Order::query()->latest('orders.created_at')->with([
'payments' => function($query){
$query->orderBy('created_at', 'DESC');
}
])->get();
我剛試過這個,但仍然顯示最新的訂單!
uj5u.com熱心網友回復:
原諒我不了解 Laravelle 但軟體原理到處都是一樣的。首先在查詢中獲得正確的順序不是更好嗎?我在此頁面上看到(與大多數其他資料庫框架一樣)Laravelle 支持將“order by”作為查詢的一部分。?
uj5u.com熱心網友回復:
您是否嘗試使用with()函式來獲取所有訂單付款
$orders = Order::orderBy('created_at', 'DESC')->with([
'payments' => function($query){
$query->orderBy('created_at', 'DESC');
}
])->get();
uj5u.com熱心網友回復:
payments如果要按最近的付款對訂單進行排序,則需要先加入表格:
$orders = Order::leftJoin('payments', function($join){
$join->on('orders.ord_id', '=', 'payments.pay_ord_id')
->on('payments.pay_id', '=', \DB::raw("(SELECT pay_id from payments WHERE orders.ord_id = payments.pay_ord_id ORDER BY created_at DESC limit 1)"));
})
->with([
'payments' => function($query){
$query->orderBy('created_at', 'DESC');
}
])
->orderBy('payments.created_at', 'DESC')
->orderBy('orders.created_at', 'DESC')
->get();
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/401271.html
標籤:php 拉拉维尔 一对多 laravel-5.8 laravel-关系
下一篇:Laravel獲得學校用戶
