Laravel合并逻辑

时间:2018-05-05 08:10:58

标签: laravel collections merge model eloquent

在我的情况下,我需要一起使用集合。但我也需要这个模型。我决定合并口才。像这样:

        $products = Product::orderBy('created_at', 'desc')->get();
        $sliders = Slider::orderBy('order', 'asc')->get();
        $news = News::orderBy('order', 'asc')->get();

        $collection = new ModelCollection();
        $result = $collection->merge($products)->merge($news)->merge($sliders)->sortByDesc('created_at');
        dd($result);

$ products有4个数据,$ slider也有4个数据,$ news有3个数据。 但我总是通过排序created_at得到4个数据。为什么我无法从集合中获取11个数据?

https://laravel.com/docs/5.6/collections#method-merge

在这种情况下没有限制或规则。 为了简洁起见,我试图用我选择的模型制作一个数组。如果它是一个集合,它保持模型。如果它只是一个数组,我还需要为每个数据集添加模型名称。

array(
Products > product1,product2,product3,product4
News > news1, news2, news3
Slider > slider1, slider2, slider3
)

1 个答案:

答案 0 :(得分:1)

如果您希望所有集合都在一个数组中,那么

$products = Product::orderBy('created_at', 'desc')->get();
$sliders = Slider::orderBy('order', 'asc')->get();
$news = News::orderBy('order', 'asc')->get();

$result = array();
$result['products'] = $products;
$result['sliders'] = $sliders;
$result['news'] = $news;

这将创建您想要的集合$result

array(
products > product1,product2,product3,product4
news > news1, news2, news3
sliders > slider1, slider2, slider3
)

希望这会对你有所帮助。评论是否有任何疑问。