Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 11.10.2016 10:00:49

Вывод связанной модели в blade

Доброго времени суток!
В контроллере, вроде бы, отрабатывает корректно:

$users = User::with(['roles' => function ($query) {
                                $query->where('roles.name', '!=', 'testban'); 
             }])->get();
return view('users.index', ['users' => $users]);

Не получается вывести роль в blade, никто не подскажет, как это сделать, как ее из $users вытащить?

Не в сети

#2 11.10.2016 11:30:57

Re: Вывод связанной модели в blade

Зависит от отношения между User и Role.

@foreach($users as $user)
    {{ dd($user->roles) }} // Покажет роли первого пользователя.
@endforeach

Если роль одна, то $users->first()->roles

Не в сети

#3 11.10.2016 11:37:03

Re: Вывод связанной модели в blade

Большое спасибо! Роль одна.

Не в сети

#4 20.03.2017 20:52:44

Re: Вывод связанной модели в blade

Извините, я продолжу тему, есть вопрос.

В модели так:

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.

Не в сети

#5 21.03.2017 06:11:23

Re: Вывод связанной модели в blade

нет. когда ты пишешь ->getPhoto() ты получаешь построитель запроса на выборку связанных моделей (и можешь добавить туда доп. условия, сортировку, постраничку и пр.) – в этом случае у тебя обязательно будет запрос в базу. когда ты пишешь ->getPhoto ты получаешь коллекцию уже выбранных моделей. они выбираются если не были выбраны ранее (ленивая загрузка) так что если ты выводишь множество записей лучше загрузить связи жадно (иначе получишь кучу запросов в базу в цикле). если связанные модели были загружены ранее – запросов в базу делаться не будет.

мне не нравится что у тебя связи названы getXxx – это не функции-геттеры, это ОРМ-связи, называй их соответственно их смыслу photos, users, competitors, и т.д. или в единственном числе если связь на одну запись

Не в сети

#6 21.03.2017 07:40:16

Re: Вывод связанной модели в blade

Большое спасибо, кажется, разобрался.
По замечанию, логично, упущение. Спасибо!

Не в сети

Подвал раздела