Php “拉雷维尔”;“属于”;功能。不太清楚这是怎么回事。帮助从刀片模板访问相关型号信息
在我正在使用的一个类中,我在理解“belongsTo”方法时遇到问题。 我有一个“资产”模型,它不是我自己写的,但我想它是可以工作的,它有一个函数,我试图访问“AssetMake”表的“name”属性(外键和主键参数看起来是正确的): 在类似这样的刀片模板中,插入了$asset变量(并且成功地在同一页面上使用了该变量): 我已尝试在刀片模板中访问注入的$asset变量,如下所示:Php “拉雷维尔”;“属于”;功能。不太清楚这是怎么回事。帮助从刀片模板访问相关型号信息,php,laravel,eloquent,laravel-blade,Php,Laravel,Eloquent,Laravel Blade,在我正在使用的一个类中,我在理解“belongsTo”方法时遇到问题。 我有一个“资产”模型,它不是我自己写的,但我想它是可以工作的,它有一个函数,我试图访问“AssetMake”表的“name”属性(外键和主键参数看起来是正确的): 在类似这样的刀片模板中,插入了$asset变量(并且成功地在同一页面上使用了该变量): 我已尝试在刀片模板中访问注入的$asset变量,如下所示: <td width="20%">{{ $asset->assetMake-&g
<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>
{{$asset->assetMake->get}
{{$asset->assetMake->get()}
{{$asset->assetMake()->get}
{{$asset->assetMake->name}
{{$asset->assetMake()->name}
assetmake表的“name”属性是我在这里真正需要访问的。
这是一种懒惰/急切的加载问题吗?我只是不确定这里到底发生了什么,以及为什么我不能访问该物业。我查过各种来源,我试过的都不管用,但我确信这是相当直接的。有什么提示吗?访问相关模型的方法是像通常调用属性一样调用它。所以像
$asset->assetMake->name
这样的东西应该可以工作
在幕后,我相信Laravel使用PHP的神奇方法基于方法名称在模型上创建属性,以便它们指向相关模型(父或子)
类似地,如果您有一个有许多类似这样的关系:
公共职能儿童()
{
返回$this->hasMany(Child::class,'Child_id',);
}
只需调用$parent->children
,即可访问子项
如果需要从父级访问子查询生成器,则必须调用children()
方法
例如
$parent->children()->create($childData)
好的,我算出来了。这是控制器的问题。我仍在努力解决这个问题,拉雷维尔的魔力让我感到困惑。我在控制器查询中添加了一行“->join('assetmake','assetmake.id','asset.assetmake_id')”。并将“assetmake.name作为AssetMakeName”添加到select语句中
$assets = FleetFuel::where('fleet_fuel.customer_id', $user->customer_id)
->where('fleet_fuel.isOrphan', 0)
->where('fleet_fuel.hours', '>=', 0) // -1.00 = first ever record
->where('fleet_fuel.burn', '>=', 0) // -1.00 = first ever record
->join('asset', function($join) {
$join->on('fleet_fuel.unit_id', '=', 'asset.Unit_ID');
$join->on('fleet_fuel.customer_id', '=', 'asset.Customer_ID');
})
->join('assettype', 'assettype.ID', 'asset.assettype_id')
->join('assetmake', 'assetmake.id', 'asset.assetmake_id')
->select('fleet_fuel.unit_id', DB::raw('max(fleet_fuel.delivery) as lastfuel'), 'asset.description', 'asset.Rego', 'assettype.Name as TypeName', 'assetmake.name as AssetMakeName')
->groupBy('fleet_fuel.unit_id')->get();
return view('fleetFuel.assets',
[
'companyName' => $companyName,
'assets' => $assets
]
);
然后在刀片视图中访问它:
<td width="20%" class="filter_make">{{ (isset($asset['AssetMakeName'])) ? ($asset['AssetMakeName']) : ("No make available")}}</td>
{(isset($asset['AssetMakeName'])?($asset['AssetMakeName']):(“无可用”)}
首先,这是正确的:$asset->assetMake->name
。您是否收到任何错误消息?这是使用“$asset->assetMake->name”-“尝试获取非对象的属性“name”时出现的错误。此外,使用{{$asset['description']}语法成功读取并显示了$asset对象的其他实例。我还尝试了$asset['assetMake']['name']和$asset['assetMake']->name和我已经检查了数据库中的值是否为空。{{{$asset->assetMake->toSql()}
的输出是什么?这是使用查询生成器实现的一种方法,但这不是一种有说服力的关系。所以它可能会起作用,但这不是最好的方法。
<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>
$assets = FleetFuel::where('fleet_fuel.customer_id', $user->customer_id)
->where('fleet_fuel.isOrphan', 0)
->where('fleet_fuel.hours', '>=', 0) // -1.00 = first ever record
->where('fleet_fuel.burn', '>=', 0) // -1.00 = first ever record
->join('asset', function($join) {
$join->on('fleet_fuel.unit_id', '=', 'asset.Unit_ID');
$join->on('fleet_fuel.customer_id', '=', 'asset.Customer_ID');
})
->join('assettype', 'assettype.ID', 'asset.assettype_id')
->join('assetmake', 'assetmake.id', 'asset.assetmake_id')
->select('fleet_fuel.unit_id', DB::raw('max(fleet_fuel.delivery) as lastfuel'), 'asset.description', 'asset.Rego', 'assettype.Name as TypeName', 'assetmake.name as AssetMakeName')
->groupBy('fleet_fuel.unit_id')->get();
return view('fleetFuel.assets',
[
'companyName' => $companyName,
'assets' => $assets
]
);
<td width="20%" class="filter_make">{{ (isset($asset['AssetMakeName'])) ? ($asset['AssetMakeName']) : ("No make available")}}</td>