Laravel Eloquent按关系表列排序
我试图按shop_products
表中的pinned
列对shop_products_options
表中的产品进行排序:
$products = Shop\Product::with(['options' => function ($query) { $query->orderBy('pinned', 'desc');
}])->paginate(5);
我在商店\产品模型中设置关系:
public function options(){
return $this->hasOne('Shop\Options');
}
但是产品没有分类。我得到一个仅适用于shop_products_options
表的查询。
SELECT * FROM `shop_products_options` WHERE `shop_products_options`.`product_id` in ('8', '9', '10', '11', '12') ORDER BY `pinned` DESC
如何解决?
回答:
急切的加载使用单独的查询,因此您需要为此加入:
$products = Shop\Product::join('shop_products_options as po', 'po.product_id', '=', 'products.id') ->orderBy('po.pinned', 'desc')
->select('products.*') // just to avoid fetching anything from joined table
->with('options') // if you need options data anyway
->paginate(5);
SELECT
子句是为了不将联接的列追加到Product
模型中。
编辑:根据@alexw注释-如果需要,您仍然可以包括联接表中的列。您可以将它们添加到select
或致电addSelect/selectRaw
等。
以上是 Laravel Eloquent按关系表列排序 的全部内容, 来源链接: utcz.com/qa/425384.html