php - 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 表的“名称”属性是我真正需要在这里访问的。这是某种懒惰/急切的加载问题吗?我只是不确定这里到底发生了什么,以及为什么我无法访问该物业。我已经检查了各种来源,但我没有尝试过任何工作,但我确信它相当简单。有小费吗?
解决方案
访问相关模型的方法是像通常调用属性一样调用它。所以类似的东西$asset->assetMake->name
应该工作。
在幕后,我相信 Laravel 使用 PHP 的神奇方法根据方法名称在模型上创建属性,以便它们指向相关模型(父或子)。
同样,如果您有这样的hasMany
关系:
public function children()
{
return $this->hasMany(Child::class, 'child_id',);
}
您可以children
通过调用来访问$parent->children
。
如果您需要从父级访问子查询生成器,则必须调用该children()
方法。
例如
$parent->children()->create($childData)
推荐阅读
- java - 在 Java 11 桌面应用程序中使用 maven proguard
- javascript - 如何理解 javascript react 中的这段代码
- android-studio - 缺少类:com.fasterxml.jackson.core.type.TypeReference。R8:警告
- html - 过渡影响背景图像
- cron - 当我在 RedHat 中使用本地时间时,为什么我的 crontab 不工作?
- jmeter - jmeter中的403禁止错误,但api在邮递员中工作正常
- typescript - dtslint 失败,因为 DefinitiveTyped 中的依赖
- reactjs - 从 react-navigation v1 迁移到 v3.11 时遇到问题
- hive - Hive - 仅支持 1 个子查询表达式
- r - ft_tokenizer 将单词标记为更低,我希望它保持原样