如何使用with()订购热切关系

时间:2017-08-29 21:30:59

标签: laravel laravel-5 laravel-5.2

我需要订购

Content::with('blocks.settings')->where('slug', $slug)->first();

按“订单”列阻止,我该怎么做?

我知道这种方法:

with(array('model' => function($query) {
        $query->orderBy('result', 'DESC');
    }))

但我不确定这对我的情况有何影响?我正在使用嵌套的预先加载,在我看来,上述方法只适用于单级急切加载?

有人可以告诉我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

这可以解决您的问题:

Content::with(array(
    'blocks' => function($query) {
        $query->orderBy('order', 'DESC');
    }, 
    'blocks.settings'
))->where('slug', $slug)->first();;

首先我们告诉它加载块并按order列对它们进行排序。数组中的第二个元素也告诉您加载所有块的设置。

答案 1 :(得分:1)

blocks模型上添加约束

Content::with(array(
    'blocks.settings' => function($query) {
        $query->orderBy('order', 'DESC'); // this constraint works on blocks model
    }    
))->where('slug', $slug)->first();

如果您想在settings模型上添加约束,请尝试使用

Content::with(array(
    'blocks'=> function($query) {
        $query->with(array(
                    'settings'=> function($query) {
                        $query->orderBy('order', 'DESC'); // this constraint works on blocks model
                    }    
                ))
              ->ordery('order', 'DESC'); // this constraint works on blocks model
    }    
))->where('slug', $slug)->first();