W
W
werder332015-08-31 00:15:59
Laravel
werder33, 2015-08-31 00:15:59

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;

Displays only for a specific id.
Tell me how to display all namefiltr for each title?
Thanks in advance)

Answer the question

In order to leave comments, you need to log in

2 answer(s)
D
D', 2015-08-31
@Denormalization

$cat = Project::roles()->get();
Have you tried reading?

Григорий Васильков, 2019-08-01
@gzhegow

$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 question

Ask a Question

731 491 924 answers to any question