2016-09-21 74 views
0

我有两种模式:item和faq。在一个belongsToMany中,相互之间有一个正确创建的连接表:item_faq(单数)。我的连接表上有一个额外的字段用于订购。Laravel 5.0如何用()查询命令进行口头说明

在我看来,我得到所有的常见问题解答,如果他们有一个数据透视表记录我输出“检查”复选框。我也在复选框列表上拖放了订单,效果很好。

一些代码注释:

// ITEMS MODEL 
public function faqs(){ 
     return $this->belongsToMany('App\Faq'); 
    } 

// FAQ MODEL 
public function items(){ 
    return $this->belongsToMany('App\Item'); 
} 

public function hasItem($item) { 
    $items = $this->items->lists('id'); 
    return in_array($item, $items); 
} 

架构的连接表:

  • ITEM_ID
  • faq_id
  • 为了
  • 时间戳

我的问题是他们的常见问题解答不会按照数据透视表上的顺序列排序。

我用一个很简单的:

$faqs = \App\Faq::with('items')->get(); 

要检索的常见问题和这个工作在让所有的常见问题,如果他们是相关的,它会检查复选框。

如何通过连接表上的订单栏来排序?

回答

0

看看Eager Load Constraints和我认为它会帮助提供一个解决方案。从文档:

当然,渴望加载闭包不限于“约束”。您也可以申请订单:

$users = User::with(['posts' => function($query) { 

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

}])->get(); 
+0

我已经试过了,但项目的顺序不会改变。如果orderBy字段没有找到,订单是否会恢复到某种默认值?我应该参考item_faq.order还是只订购? –

+0

看看你提供的'FAQ模型',我看不到'items'关系的定义。它在那里,只是没有提供上面?至于默认行为,我相信它通过'id'排序。我不怀疑添加'item_faq.order'会因为封闭与'items'连接有关而改变。 – camelCase

+0

我的歉意我错误地标记了一些代码。项目关系在上面(现在)定义。基本上orderBy似乎没有影响我不明白的顺序。 –