如何在刀片视图中显示连接的表数据

Posted

技术标签:

【中文标题】如何在刀片视图中显示连接的表数据【英文标题】:How to display connected table data in blade view 【发布时间】:2016-08-15 23:42:06 【问题描述】:

我有 2 个具有多对多关系的表

Members: id, name , ...

Locations: id,location_id

通过数据透视表连接

members_location: member_id, location_id

在我的位置模型中,我有以下功能

public function members()
        return $this->belongsToMany('App\Member','location_member','location_id','member_id');
    

LocationController.php 将数据传递给刀片模板

    $locations = Location::All();
    return view('locations.overview',['locations' => $locations]);

所以在我的 overview.blade.php 中我执行以下操作

            @include('includes.message-block')
        <!-- get a list of locations -->
                <table class="member_overview table table-striped table-hover">
        <thead>
            <tr>
                <th>Naam</th>
                <th>Locatie</th>
                <th>Opmerking</th>
            </tr>
        </thead>
        <tbody>
        @foreach($locations as $location)
            <tr>
                <td>
                    $location->location_id
                </td>
                <td>
                    $location->members->id                      
                </td>
                <td>

                </td>
            </tr>
        @endforeach

返回错误。

未定义属性:Illuminate\Database\Eloquent\Collection::$id (View: ...)

如果我将 id 属性放在:

<td>
                        $location->members->id                      
                    </td>

我得到一个数组 ["id":1,"first_name":"Sa ..]。如何从该数组中选择 first_name 属性

选择一个位置时的修补输出

$location->成员 => Illuminate\Database\Eloquent\Collection #658 全部: [ 应用\会员#664 编号:1,

【问题讨论】:

是位置和成员之间会有多对多的关系吗? @AlankarMore 是的,他们可以 我想你提到了错误的表名是错字吗?问题描述和查询/关系代码中的“members_location”是否已将其称为“location_member”?这个“location_member”是什么? @AlankarMore 位置成员是连接位置和成员表的数据透视表 【参考方案1】:

belongsToMany 关系将返回一个集合,而不是一个 eloquent 对象的单个实例。

要克服这个问题,您可以循环访问成员,例如

foreach($location->members as $member) ...

如果你只想要第一个,那么你可以这样做:

$location->members->first()->id

此外,这只是一个仅供参考,但由于多对多关系带来的 n+1 问题,您最终可能会收到大量数据库调用。为了克服这个问题,您可以简单地在控制器中添加一个 with 方法,即

$locations = Location::with('members')->get();

注意,如果链中有任何其他方法,则必须使用 get 而不是 all(如上)。

希望这会有所帮助!

【讨论】:

以上是关于如何在刀片视图中显示连接的表数据的主要内容,如果未能解决你的问题,请参考以下文章

如何显示传递给刀片视图的数据[重复]

使用 Javascript 在 Laravel 刀片视图中显示数组中的动态数据时出现问题

如何将 vue 数据显示到 Laravel 刀片?

如何在 laravel 刀片视图中打破 foreach 循环?

如何在 MVC 的单个视图中制作插入表单和显示来自数据库的数据的表?

laravel在数据库中的刀片页面中附加html代码[重复]