Livewire 关系船不适用于 属性
Livewire Relation Ship not working with property
很好,如果他们帮我解决了这个问题,谢谢。实际上,我在 Laravel 中遇到了这个问题,我是 Livewire 的新手。
控制器
class ViewCourse extends Component{
public $course;
public function mount($id , $name = null , $mediaID = null){
$this->course = course::findOrfail($id);
}
public function render(){
return view('livewire.view-course')->extends('layouts.app');
}
关系模型
class course extends Model{
public function teacher(){
return $this->hasOne('App\Models\User' , 'id' , 'user_id')->select('name' , 'picture');
}
}
Blade代码
<p>{{$course->teacher->name}}</p>
我的错误
ErrorException
Trying to get property 'name' of non-object (View: C:\xampp\htdocs\rstacode\resources\views\livewire\view-course.blade.php)
即使集合为空,您也总是尝试从对象访问 属性,这就是出现问题的原因。
总是在打印前检查集合是否有关联的关系数据。
如果你在PHP 7.*
{{ $course->teacher->name ?? '' }}
在PHP 7.*
之前
{{ (isset($course->teacher->name) && !empty($course->teacher->name)) ? $course->teacher->name : '' }}
问题是您没有select输入 Laravel 正确解析关系和获取用户模型所需的列。
您可以删除 select 或将 id
列添加到您的 select:
删除 select:
public function teacher()
{
return $this->hasOne('App\Models\User', 'id', 'user_id');
}
将所需的列添加到 select:
public function teacher()
{
return $this->hasOne('App\Models\User', 'id', 'user_id')
->select([
'id',
'name',
'picture',
]);
}
我个人会删除 select,因为我只从关系中 selecting 的几列中看不到任何价值。此外,如果您向用户添加更多列,它可能会在以后引起更多麻烦 table.
你必须做
$this->course = course::with('teacher')->findOrfail($id);
为了提前加载您的关系数据,请在此处查看文档:https://laravel.com/docs/8.x/eloquent-relationships#eager-loading-by-default
很好,如果他们帮我解决了这个问题,谢谢。实际上,我在 Laravel 中遇到了这个问题,我是 Livewire 的新手。
控制器
class ViewCourse extends Component{
public $course;
public function mount($id , $name = null , $mediaID = null){
$this->course = course::findOrfail($id);
}
public function render(){
return view('livewire.view-course')->extends('layouts.app');
}
关系模型
class course extends Model{
public function teacher(){
return $this->hasOne('App\Models\User' , 'id' , 'user_id')->select('name' , 'picture');
}
}
Blade代码
<p>{{$course->teacher->name}}</p>
我的错误
ErrorException
Trying to get property 'name' of non-object (View: C:\xampp\htdocs\rstacode\resources\views\livewire\view-course.blade.php)
即使集合为空,您也总是尝试从对象访问 属性,这就是出现问题的原因。
总是在打印前检查集合是否有关联的关系数据。
如果你在PHP 7.*
{{ $course->teacher->name ?? '' }}
在PHP 7.*
{{ (isset($course->teacher->name) && !empty($course->teacher->name)) ? $course->teacher->name : '' }}
问题是您没有select输入 Laravel 正确解析关系和获取用户模型所需的列。
您可以删除 select 或将 id
列添加到您的 select:
删除 select:
public function teacher()
{
return $this->hasOne('App\Models\User', 'id', 'user_id');
}
将所需的列添加到 select:
public function teacher()
{
return $this->hasOne('App\Models\User', 'id', 'user_id')
->select([
'id',
'name',
'picture',
]);
}
我个人会删除 select,因为我只从关系中 selecting 的几列中看不到任何价值。此外,如果您向用户添加更多列,它可能会在以后引起更多麻烦 table.
你必须做
$this->course = course::with('teacher')->findOrfail($id);
为了提前加载您的关系数据,请在此处查看文档:https://laravel.com/docs/8.x/eloquent-relationships#eager-loading-by-default