Answer the question
In order to leave comments, you need to log in
How to display all table relations in laravel?
Started learning Laravel and got a problem.
There are 3 tables projects, filtrs and filtr_project.
1 projects // with fields:
-id
-title
2 filtrs // with fields
-id
-namefiltr
3 filtr_project // with fields:
-id
-project_id
-filtr_id
class Project extends Model
{
public function roles()
{
return $this->belongsToMany('App\Models\Filtr');
}
}
$cat = Project::find()->roles;
Answer the question
In order to leave comments, you need to log in
$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 запросов на роли.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question