#laravel #laravel-livewire
#laravel #laravel-livewire
Вопрос:
Доброго времени суток, спасибо, если они помогут мне с этой проблемой. На самом деле у меня такая проблема в 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('AppModelsUser' , 'id' , 'user_id')->select('name' , 'picture');
}
}
Блейд-код
<p>{{$course->teacher->name}}</p>
Моя ошибка
ErrorException
Trying to get property 'name' of non-object (View: C:xampphtdocsrstacoderesourcesviewslivewireview-course.blade.php)
Комментарии:
1. Не могли бы вы проверить, работает ли это, если вы удалите select
->select('name' , 'picture')
из отношения2. @Remul, спасибо, это работает!
Ответ №1:
Проблема в том, что вы не выбираете столбцы, которые необходимы Laravel для правильного разрешения отношений и извлечения пользовательской модели.
Вы можете либо удалить select, либо добавить id
столбец в свой select:
Удаление выбора:
public function teacher()
{
return $this->hasOne('AppModelsUser', 'id', 'user_id');
}
Добавьте необходимые столбцы в поле выбора:
public function teacher()
{
return $this->hasOne('AppModelsUser', 'id', 'user_id')
->select([
'id',
'name',
'picture',
]);
}
Я бы лично просто удалил select, поскольку не вижу никакого значения в выборе только нескольких столбцов из отношения. Кроме того, это, вероятно, вызовет больше головной боли позже, если вы добавите больше столбцов в таблицу user.
Ответ №2:
Вы должны сделать
$this->course = course::with('teacher')->findOrfail($id);
для того, чтобы быстро загрузить данные о ваших отношениях, взгляните на документ здесь: https://laravel.com/docs/8.x/eloquent-relationships#eager-loading-by-default
Ответ №3:
Вы всегда пытаетесь получить доступ к свойству из объекта, даже если коллекция пуста, вот почему возникает проблема.
Всегда проверяйте, имеет ли коллекция связанные реляционные данные перед печатью.
Если вы в PHP 7.*
{{ $course->teacher->name ?? '' }}
До PHP 7.*
{{ (isset($course->teacher->name) amp;amp; !empty($course->teacher->name)) ? $course->teacher->name : '' }}