Мой дизайн стола:
users: | id |username | ... |
tickets: | id | supp_id | ... |
ticket_replies: | id | ticket_id | user_id |
Мои контроллеры выглядят так:
пользователь:
public function tickets()
{
return $this->hasMany('App\ticket');
}
билет:
public function ticket_replie()
{
return $this->hasMany('App\ticket_replie');
}
public function supporter()
{
return $this->hasOne('App\User', 'id','supp_id');
}
Мой контроллер выглядит так:
$tickets = Auth::user()->tickets()->orderBy('status', 'desc')->paginate(2);
return view('protected.ticketsList', [
'tickets' => $tickets,
]);
На мой взгляд, я использую:
supporter: {{ $ticket['supporter']->username }}
Есть идеи, где я делаю неправильно? Я все время получаю эту ошибку:
Попытка получить свойство необъекта
На мой взгляд, связь между самими таблицами выполнена правильно.
Когда я использую например {{ dd($ticket) }}
на мой взгляд, я получаю объект со всеми необходимыми предметами:
Итак, прежде всего, пытаясь получить доступ к функции public function supporter()
на ваше Ticket
Модель не может быть выполнена с использованием синтаксиса массива. Изменить:
{{ $ticket['supporter']->username }}
чтобы:
{{ $ticket->supporter()->first()->username }}
Если вы не хотите использовать ->first()
Вы можете сделать одну из двух вещей. Измените существующий запрос, включив в него ->with("supporter")
синтаксис:
$tickets = Auth::user()
->tickets()
->with("supporter")
->orderBy('status', 'desc')
->paginate(2);
И получить доступ к стороннику с точки зрения так:
{{ $ticket->supporter->username }}
// Notice how supporter is no longer a `method` ->supporter() but a `property` ->supporter
Или вы можете изменить ваши отношения, чтобы включить ближе ->first()
:
public function supporter(){
return $this->hasOne('App\User', 'id','supp_id')->first();
}
И затем получить к нему доступ так:
{{ $ticket->supporter()->username }}
// Notice you no longer need `->first()`
Итак, как вы можете видеть, есть несколько способов доступа к Ticket
«s Supporter
, Обратите внимание, что вы не можете комбинировать эти параметры; изменение функции, чтобы включить ->first()
а затем пытается использовать ->with()
вернет ошибку, поэтому выберите один или другой.
Надеюсь, это поможет!
Других решений пока нет …