在 laravel 8 中显示名称而不是 ID
Display Name instead of ID in laravel 8
我有两个表:用户和组织。用户包含外键 organisation_id 引用组织。对于查看用户,它显示错误 'Trying to get 属性 'name' of non object.
用户控制器
public function view($id)
{
$record = User::find($id);
return view('user.view',compact('record'));
}
User.php
public function getOrg()
{
return $this->belongsTo(Organisation::class);
}
View.blade.php
<tr>
<th>Organisation</th>
<td>{{ $record->organisation_id->name }}</td>
</tr>
尝试参考另一个问题和答案仍然无法解决
首先,您的 UserController 中没有任何错误。但是,请考虑使用 Implicit Route Model Binding 在您的 UserController 方法中自动获取您的用户作为参数 在您的其余代码正常工作后。
其次,您的 User.php 没有根据 Laravel 的约定定义关系,我认为这是问题的根源。相反,更喜欢以下内容:
public function organisation()
{
return $this->belongsTo(Organisation::class);
}
organisation()
方法使用了一种“神奇”方法,允许您使用 view.blade.php
中的以下内容获取关系的完整 Eloquent 模型:
<tr>
<th>Organisation</th>
<td>{{ $record->organisation->name }}</td>
</tr>
您的代码因以下原因而中断:
- $record->organization_id 是指数据库中的实际数字,而不是相关模型。要在您的示例中获取相关模型,您需要执行 $record->getOrg()。但是,出于上述原因,您应该重命名该方法以更好地利用 Laravel 的约定。
- 此外,以 get...() 开头的方法被视为 访问器 数据库中未找到的其他模型属性。所以尽量避免将它们用于简单的关系。
如果您有任何问题,请告诉我。
在 User.php
中,您的方法名称应该是 oranisation
而不是 getOrg
。 Laravel 在访问 $user->organisation
属性.
时在幕后调用此方法 organisation()
public function organisation()
{
return $this->belongsTo(Organisation::class, 'organisation_id', 'id');
}
然后在 view.blade.php
中稍微调整一下:
<tr>
<th>Organisation</th>
<td>{{ $record->organisation->name }}</td>
</tr>
您已在查询中定义关系
public function view($id)
{
$record = User::with('getOrg')->find($id)->first();
return view('user.view',compact('record'));
}
在视图中
<tr>
<th>Organisation</th>
<td>{{ $record->getOrg->name }}</td>
</tr>
试试这个方法
我有两个表:用户和组织。用户包含外键 organisation_id 引用组织。对于查看用户,它显示错误 'Trying to get 属性 'name' of non object.
用户控制器
public function view($id)
{
$record = User::find($id);
return view('user.view',compact('record'));
}
User.php
public function getOrg()
{
return $this->belongsTo(Organisation::class);
}
View.blade.php
<tr>
<th>Organisation</th>
<td>{{ $record->organisation_id->name }}</td>
</tr>
尝试参考另一个问题和答案仍然无法解决
首先,您的 UserController 中没有任何错误。但是,请考虑使用 Implicit Route Model Binding 在您的 UserController 方法中自动获取您的用户作为参数 在您的其余代码正常工作后。
其次,您的 User.php 没有根据 Laravel 的约定定义关系,我认为这是问题的根源。相反,更喜欢以下内容:
public function organisation()
{
return $this->belongsTo(Organisation::class);
}
organisation()
方法使用了一种“神奇”方法,允许您使用 view.blade.php
中的以下内容获取关系的完整 Eloquent 模型:
<tr>
<th>Organisation</th>
<td>{{ $record->organisation->name }}</td>
</tr>
您的代码因以下原因而中断:
- $record->organization_id 是指数据库中的实际数字,而不是相关模型。要在您的示例中获取相关模型,您需要执行 $record->getOrg()。但是,出于上述原因,您应该重命名该方法以更好地利用 Laravel 的约定。
- 此外,以 get...() 开头的方法被视为 访问器 数据库中未找到的其他模型属性。所以尽量避免将它们用于简单的关系。
如果您有任何问题,请告诉我。
在 User.php
中,您的方法名称应该是 oranisation
而不是 getOrg
。 Laravel 在访问 $user->organisation
属性.
organisation()
public function organisation()
{
return $this->belongsTo(Organisation::class, 'organisation_id', 'id');
}
然后在 view.blade.php
中稍微调整一下:
<tr>
<th>Organisation</th>
<td>{{ $record->organisation->name }}</td>
</tr>
您已在查询中定义关系
public function view($id)
{
$record = User::with('getOrg')->find($id)->first();
return view('user.view',compact('record'));
}
在视图中
<tr>
<th>Organisation</th>
<td>{{ $record->getOrg->name }}</td>
</tr>
试试这个方法