当前位置: 首页 > 面试题库 >

Laravel Eloquent按关系表列排序

关志
2023-03-14
问题内容

我试图按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等。



 类似资料:
  • 问题内容: 我有一个数字列表:(这是现有记录的ID) 我有一个带有列和的mysql表,其中是整数主键。我想从该表中选择的记录,但在一个特定的顺序,例如,,,,,。 是否可以在MyISAM的查询中执行此操作,而无需任何后处理? 最简单的方法是什么? 问题答案: 由于,一个简单就足够了。 但是,如果您要这样订购:,则可以使用function : 如果查询匹配的行多于您列出的行 返回时,行不匹配任何您列

  • 问题内容: 如何按降序对列表进行排序? 问题答案: 在一行中,使用: 将函数传递给:

  • 我有两种型号: 产品,它有字段 库存,具有产品标识和数量字段 我想按排序字段(ASC)获取订购的产品,但库存量等于0的产品需要位于列表的末尾。 例如。 产品介绍 股票 预期列表(产品ID)-4、1、2、3 我已经为我需要做的事情编写了SQL查询。 有没有一种方法可以使用雄辩模型的作用域来获得此类列表? 使现代化 解决方案。

  • 问题内容: Python中有什么方法可以按频率对列表进行排序? 例如, 上面的列表将按照其值的频率顺序进行排序,以创建以下列表,其中频率最高的项目位于最前面: 问题答案: 我认为这对于A来说将是一项好工作: 或者,您可以写第二行而不使用lambda: 如果您有多个具有相同频率的元素 并且 您希望这些元素保持分组状态,那么我们可以通过更改排序键以不仅包括计数,还包括 值 来做到这一点:

  • 我开始在我的项目中使用primefaces,我马上就遇到了问题。我有一个列表,其中包含一些我用实体管理器从数据库中获取的东西,我在primefaces数据表的视图中显示了它。在我的后台bean中,我有:List getList(),在这里我使用实体管理器从数据库中检索记录,并立即返回。。 和myService: 我的豆子: 视图: 这种方式primefaces排序不起作用,我在堆栈上的某个地方读到

  • 我有3个表:,和,这是其他2之间的枢轴。我需要做的是按表中的位置排序。 我尝试在中的关系中排序,或者在将一起使用时排序,但我可能做错了。前任: 有人能给出一个排序两级嵌套关系的基本示例吗? 编辑:我不需要按基表中的任何列排序,而是按第二个表中的列排序数据透视表中的条目列表。 编辑2: 举例说明如何对输出进行排序: