@werder33

Как вывести все отношения таблиц в laravel?

Начал изучать Laravel и возникла проблема.
Есть 3 таблицы projects, filtrs и filtr_project.
1 projects // с полями:
-id
-title
2 filtrs // с полями
-id
-namefiltr
3 filtr_project // с полями:
-id
-project_id
-filtr_id

class Project extends Model
{
 public function roles()
    {
        return $this->belongsToMany('App\Models\Filtr');
    }
}
$cat = Project::find()->roles;

Выводит только по определенному id.
Подскажите как вывести все namefiltr для каждого title?
Заранее спасибо)
  • Вопрос задан
  • 443 просмотра
Пригласить эксперта
Ответы на вопрос 2
Denormalization
@Denormalization
$cat = Project::roles()->get();

Не пробовали читать?
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
$projects = Project::with('roles'); // сформировать запрос на проекты и заготовить запрос на роли. Запрос на проекты при запуске выполнит еще и второй.
foreach ($projects as $project) {
$roles = $project->roles; // модели ролей по данному проекту
}

$project = new Project(); // создать новую модель ИЛИ
$project = Project()::first(); // выбрать первую модель из базы

$query = $project->roles(); // сформировать запрос, который потом нужно выполнить. В качестве WHERE id= будет использован $project->id; Если его там не было - бесполезный запрос, который ссуко все равно будет отправлен на сервер базы данных
$query->get(); // список ролей или пустая коллекция

$project->roles; // сразу список ролей (он еще и запросит если не был запрошен через with())

Будь внимателен, под капотом сделается запрос на роли, если ты его не сделал через with('roles'). Если ты это напишешь в каком-нибудь геттере типа так
public function getMyAttribute() { return $this->roles; }

то ты познакомишься с "n+1 проблемой", это когда для сотни проектов будет выполнено 100 запросов на роли.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы