如何将多个模型传递给Laravel View

时间:2017-07-21 19:13:44

标签: php laravel eloquent

在我的Laravel项目中,我试图从数据库中显示一些数据。从多个表中查找数据。结构如下所示:

  • 小组(例如姓名=" G1")

    • 预订(例如姓名=" B1")
    • 铅笔(例如姓名=" P1")
    • 墨水(例如名称=" I1")
  • 小组(例如姓名=" G2")

    • 预订(例如姓名=" B2")
    • 铅笔(例如姓名=" P2")
    • 墨水(例如名称=" I2")

Group,Book,Pencil&墨水是Eloquent / Model类。我可以很好地查找数据(具有表之间的所有关系)。现在,我想将这些数据发送到Laravel视图php,以便它可以显示。在视图php中,将显示具有组名称的组的下拉元素(例如" G1"或" G2"),因此如果用户选择" G1&# 34;,页面应显示所有G1相关信息(例如B1,​​P1,I1)和" G1",它的相关信息。默认情况下(或在页面加载时),应显示列表中的第一个组及其相关信息。

我想知道我应该如何打包数据(我相信是一些数组)并在视图中使用它?还有如何在组下拉列表中更改选择时更新视图?

非常感谢!

4 个答案:

答案 0 :(得分:1)

在您的控制器方法

$groupOne = Group::where()->get(); // Your Group One Query, Whatever It May Be
$groupTwo = Group::where()->get(); // Your Group Two Query, Whatever It May Be

return view('pathTo.someView', compact('groupOne', 'groupOne'));

您将能够在刀片模板中循环显示这些内容。例如:

@foreach( $groupOne as $item ) 

@endforeach

@foreach( $groupTwo as $item ) 

@endforeach

如果要根据下拉列表的更改来更改页面的视图/内容,则必须使用JavaScript。 Laravel开箱即用VueJS。我建议从那里开始动态改变内容。

答案 1 :(得分:1)

为每个模型提供一个变量,并将其传递给view方法。这是第二个论点:我使用compact('customerModel', 'staffModel');看起来更干净。

答案 2 :(得分:0)

首先,您使用雄辩的查询收集所需的数据:

$groups= \App\Group::where('')->get();

此方法返回带有一堆辅助方法的Collection类。如果您想要单个实例,请使用 - > first()代替。

然后,您可以将数据传递到第二个参数中的视图,如下所示:

return view('myview', [
    'groups' => $groups
]);

最后,您可以使用刀片模板指令在视图文件中呈现列表:

<select>
@foreach($groups as $group)
   <option>{{$group->book->attribute}}</option>
@endforeach
</select>

要动态更新下拉列表选项,您需要使用动态JavaScript来显示相关的下拉列表。如果您有很多组或其他模型,则在更改选择时,您应该只使用ajax一次获取一个组。使用ajax动态加载列表时,可以使用blade指令呈现初始列表但不能依赖它来更新视图,因为blade是服务器端呈现引擎,并且在视图之后无法动态更改它的内容已被发送到客户端。

答案 3 :(得分:0)

$groupOne = Group::where()->get();
$groupTwo = Group::where()->get();

我们可以在1或2时使用此命令

return view('pathTo.someView', compact('groupOne', 'groupOne'));

我们可以使用另一种这样的方法。

$params = [
            'groupOne' => $groupOne,
            'groupTwo' => $groupTwo,
            'groupThree'=>$groupThree,
            'groupFour'=>$groupFour,
            ];
return view('pathTo.someView')->with($params);

按如下所示在刀片中使用它们。

@foreach( $groupThree as $item ) 
@endforeach

@foreach( $groupfour as $item ) 
@endforeach