laravel5.1 извлекает вложенное отношение с помощью eloquent hasOne () (отношение один к одному)

Мой дизайн стола:

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) }} на мой взгляд, я получаю объект со всеми необходимыми предметами:

образ

0

Решение

Итак, прежде всего, пытаясь получить доступ к функции 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() вернет ошибку, поэтому выберите один или другой.

Надеюсь, это поможет!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]