首页 > 解决方案 > Laravel“属于”功能。不完全确定这是如何工作的。帮助从 Blade 模板访问相关模型信息

问题描述

我在理解我正在使用的课程中的“belongsTo”方法时遇到问题。我有一个不是我写的“资产”模型,但我猜它可以工作,并且它有这个功能,我试图访问“资产制作”表的“名称”属性(哪个外国和主要关键参数看起来是正确的):

public function assetMake()
{
    return $this->belongsTo(AssetMake::class, 'assetmake_id', 'id');
}

在一个看起来像这样的刀片模板中,注入了 $asset 变量(并且已成功在同一页面上使用):

                        @foreach($assets as $asset)

                            <tr>
                                <td width="5%" class="filter_id"><a href="/fleet-fuel/assets/{{ $asset['unit_id'] }}__r">{{ $asset['unit_id'] }}</a></td>
                                <td width="20%" class="filter_type">{{ $asset['TypeName'] }}</td>
                                <td width="25%">{{ $asset['description'] }}</td>
                                <td width="20%">{{ $asset->assetMake()->get() }}</td>
                            </tr>

                        @endforeach

“AssetMake”看起来是这样的,我需要一个对应的“hasMany”函数吗?:

 class AssetMake extends Model
{
    use ModelDateSerializeNonISO;
    protected $table = 'assetmake';
    protected $primaryKey = 'id';
    protected $hidden = ['updated', 'created'];
}

我已经尝试在刀片模板中访问注入的 $asset 变量,如下所示:

<td width="20%">{{ $asset->assetMake->get }}</td>
<td width="20%">{{ $asset->assetMake->get() }}</td>
<td width="20%">{{ $asset->assetMake()->get }}</td>
<td width="20%">{{ $asset->assetMake->name }}</td>
<td width="20%">{{ $asset->assetMake()->name }}</td>

assetmake 表的“名称”属性是我真正需要在这里访问的。这是某种懒惰/急切的加载问题吗?我只是不确定这里到底发生了什么,以及为什么我无法访问该物业。我已经检查了各种来源,但我没有尝试过任何工作,但我确信它相当简单。有小费吗?

标签: phplaraveleloquentlaravel-blade

解决方案


访问相关模型的方法是像通常调用属性一样调用它。所以类似的东西$asset->assetMake->name应该工作。

在幕后,我相信 Laravel 使用 PHP 的神奇方法根据方法名称在模型上创建属性,以便它们指向相关模型(父或子)。

同样,如果您有这样的hasMany关系:


public function children()
{
   return $this->hasMany(Child::class, 'child_id',);
}

您可以children通过调用来访问$parent->children

如果您需要从父级访问子查询生成器,则必须调用该children()方法。

例如

$parent->children()->create($childData)

推荐阅读