我想寫一個查詢來獲取所有產品串列及其型別。我喜歡將訂單設定為價格。我的模型是這樣的:
Product:
id
price
...
ProductType:
id
product_id
price
...
產品有價格屬性,有些產品有型別(一對多關系)。每種型別的產品都有自己的價格。當一個產品有型別時,它的價格是 0。這意味著產品型別的價格對我們很重要。現在,當我想將 orderBy 寫入價格時,我不知道如何撰寫包含價格的查詢我的意思是當產品有型別時,我們查詢第一種型別的價格,當我們沒有型別時,我們必須查詢產品自己價錢。我在 Laravel 中完成所有這些。
Products::with('types')->orderBy(???)->paginate(15);
uj5u.com熱心網友回復:
使用 sortBy... 可能會有所幫助。
Products::with('productType')->get()->sortByDesc('productType.price');
或使用
[評論后編輯]
$sortDirection = 'desc';
Products::with(['productType' => function ($query) use ($sortDirection) {
$query->orderBy('price', $sortDirection);
}])->get()->sortByDesc('product.price');
或型號
可以使用查詢函式擴展關系:
public function productType()
{
return $this->hasMany('ProductType')->orderBy('price');
}
uj5u.com熱心網友回復:
Products::with('productType')
->orderBy('price')
->orderBy(
ProductType::select('price')
->whereColumn('products.id', '=' , 'product_types.product_id')
);
您可以用作范圍,并且可以將訂單方向傳遞給它,以便您可以使用 desc 和 asc,例如
產品.php
public function scopeOrderedByProductTypesPrice($query, $order="asc"){
$query
->orderBy('price')
->orderBy(
ProductType::select('price')
->whereColumn('products.id', '=' , 'product_types.product_id')
);
}
用例:
Products::with('productType')
->OrderedByProductTypesPrice('desc')
->get()
PS:如您所見,您還可以更新范圍并接受該列作為排序的引數
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364016.html
