Laravel 拉威尔合并逻辑

Laravel 拉威尔合并逻辑,laravel,collections,merge,model,eloquent,Laravel,Collections,Merge,Model,Eloquent,在我的情况下,我需要一起使用集合。但我也需要那个模型。我决定合并雄辩的人。像这样: $products = Product::orderBy('created_at', 'desc')->get(); $sliders = Slider::orderBy('order', 'asc')->get(); $news = News::orderBy('order', 'asc')->get(); $collectio

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

        $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个数据。 但我总是通过排序来获取4个数据。为什么我不能从收集中获得11个数据

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

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

如果要将所有集合放在一个数组中,可以这样做

$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
)

希望这对你有帮助。如果有任何疑问,请发表评论。

这很有效。但是为什么$collection=新的雄辩();和$collection->merge($foo)->merge(……不起作用?根据我的经验,我认为没有像
new-elount()这样的方法
它可以定义新的Eloquent。Eloquent是用于处理数据库的简单ActiveRecord实现。Eloquent本身是一种laravel方法。因此,您不能像尝试过的那样只创建新的Eloquent。是的,您可以将集合与其他集合合并,但为此,您应该将两个集合与真实数据合并。我的意思是当我说new时雄辩的;使用illumb\Database\elount\Collection作为ModelCollection;和$Collection=newmodelcollection;这就是我所使用的。它的工作方式也和我想要的一样。但它并没有显示所有的实例。是的,这很好。但是您已经在
产品
新闻
滑块
中查询了您的集合。所以接下来您可以n do是像回答中那样处理您的集合。不要尝试创建新的ModelCollection或其他东西,这些东西将花费更多的时间加载,并使您的过程稍慢。感谢您的帮助。:)