代码之家  ›  专栏  ›  技术社区  ›  Ali Özen

Laravel合并逻辑

  •  1
  • Ali Özen  · 技术社区  · 6 年前

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

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

    $产品有4个数据,$滑块也有4个数据,$新闻有3个数据。 但我总是通过排序created\u 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 回复  |  直到 6 年前
        1
  •  1
  •   Chirag Patel    6 年前

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

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

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