Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток!
В контроллере, вроде бы, отрабатывает корректно:
$users = User::with(['roles' => function ($query) {
$query->where('roles.name', '!=', 'testban');
}])->get();
return view('users.index', ['users' => $users]);
Не получается вывести роль в blade, никто не подскажет, как это сделать, как ее из $users вытащить?
Не в сети
Зависит от отношения между User и Role.
@foreach($users as $user)
{{ dd($user->roles) }} // Покажет роли первого пользователя.
@endforeach
Если роль одна, то $users->first()->roles
Не в сети
Большое спасибо! Роль одна.
Не в сети
Извините, я продолжу тему, есть вопрос.
В модели так:
public function getPhoto()
{
return $this->hasMany('App\Photo');
}
Контроллер:
$competitor = Competitor::find($id);
//$competitor = Competitor::with('getUser', 'getPhoto')->find($id); Не важно, закомментирована эта строка,или строка выше, код в шаблоне работает в любом случае
return view('competitor.edit', ['competitor' => $competitor]);
А вот - в шаблоне:
@foreach ($competitor->getPhoto as $photo) // Здесь метод модели, получается, вызывается, напрямую
<div class="col-md-4 col-sm-4 col-xs-4">
<div class="thumbnail photo">
<div class="pic mini">
<a href=""><img class="img-responsive img-rounded" src="{{$photo->photo}}" alt="..."></a>
...
</div>
@endforeach
И это работает! Получается, методы модели вызываются напрямую в blade (или я ошибаюсь?). Можно было бы забыть, работает, и ладно. Но кошерно ли это? Притом что все ресурсы, если я правильно понял, выдают именно такую "цепочку" рекомендаций использования "жадной" загрузки в blade.
Не в сети
нет. когда ты пишешь ->getPhoto() ты получаешь построитель запроса на выборку связанных моделей (и можешь добавить туда доп. условия, сортировку, постраничку и пр.) – в этом случае у тебя обязательно будет запрос в базу. когда ты пишешь ->getPhoto ты получаешь коллекцию уже выбранных моделей. они выбираются если не были выбраны ранее (ленивая загрузка) так что если ты выводишь множество записей лучше загрузить связи жадно (иначе получишь кучу запросов в базу в цикле). если связанные модели были загружены ранее – запросов в базу делаться не будет.
мне не нравится что у тебя связи названы getXxx – это не функции-геттеры, это ОРМ-связи, называй их соответственно их смыслу photos, users, competitors, и т.д. или в единственном числе если связь на одну запись
Не в сети
Большое спасибо, кажется, разобрался.
По замечанию, логично, упущение. Спасибо!
Не в сети
Страницы 1