将两个模型合并到一个数据库调用中-Laravel

时间:2019-02-08 12:41:15

标签: php mysql laravel eloquent

我有2个模型,可以通过所有人调用:

$blocks = Block::all();
$cats = BlockCategory::all();

一个块具有与之关联的类别,我想关联数据,以便我可以显示具有某些块的所有类别。我希望我能正确解释。

所以我可以打电话给

@foreach($cats as $cats)
    {{$cats->title}}
    @foreach($cats->blocks as $blocks)
         {{$block->title}}
    @endforeach
@endforeach

有什么想法如何合并数据?如果可以的话,我基本上是在构建菜单。

2 个答案:

答案 0 :(得分:2)

您需要定义块与块类别之间的关系。确保您的数据库表具有外键关系。

将以下代码添加到您的块类别模型中

public function blocks()
{
    return $this->hasMany('App\Block');
}

确保您的块模型位于app/目录中。

现在,只需在控制器中检索类别,

$categories = BlockCategory::all();

然后您可以显示如下数据:

@foreach($categories as $category)
    {{$category->title}}
    @foreach($category->blocks as $block)
        {{$block->title}}
    @endforeach
@endforeach

答案 1 :(得分:0)

您可以选择几种解决方法。

这样定义您的关系:

模型

public function blocks()
{
    return $this->hasMany('App\Block');
}

控制器

使用with()

$categories = Blockcategory::with('blocks')->get();

一旦定义了关系,就可以从模型中调用blocks()方法来检索块

示例

$categories = Blockcategory::find(1)->blocks()->get();

// another way

$blocks = Blockcategory::blocks()->get();

Sagar的答案很好,但是在同一查询中获得类别及其关系总是更好的选择。通过仅调用Blockcategory::all()就可以在刀片文件中获得该关系,但是laravel必须针对每个循环中的每个块进行附加查询。拥有1000条记录时,这可能会导致性能问题。

Laravel relationships