我试着从shop_products_options个表中的shop_products个表中按pinned列对产品进行排序:

$products = Shop\Product::with(['options' => function ($query) {

    $query->orderBy('pinned', 'desc'); 

}])->paginate(5);

我在Shop\Product Model中设置关系:

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

如何修复它?

推荐答案

Eager loading uses separate queries so you need join for this:

$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模型.


edit: as per @alexw comment - you still can include columns from joined tables if you need them. You can add them to select or call addSelect/selectRaw etc.

Laravel相关问答推荐

Laravel-如何按第三表关系对数据进行分类

Laravel复选框值更新

我在 laravel 中插入多个复选框值.我怎样才能做到这一点?

在 laravel 5.3 中截断的错误日志(log)

Laravel:如何强制使用 HTTPS?

Laravel - 验证 - 如果字段为空则需要

带有消息...必须返回关系实例的 LogicException.

在 Laravel 5 中扩展请求类

路由模型绑定不起作用

这个上下文的流程应该是怎样的? (根据 Select 的付款方式,将处理付款的代码放在哪里?)

如何在中间件 Laravel 中获取请求的控制器和操作的名称

Laravel 5.3 Electron邮件队列中不允许序列化关闭

使用数据库中的值进行动态邮件配置 [Laravel]

laravel 4 - 如何限制(采取和跳过)Eloquent的 ORM?

Laravel 5.4 有时验证规则不起作用

Laravel:自定义或扩展通知 - 数据库模型

在 Laravel artisan 命令中使用详细

如何在 laravel 用户删除中重置自动增量?

登录后 DevTools 无法解析 SourceMap 错误将重定向到该 js 文件

在 Laravel 中判断会话超时