Могу ли я заставить модель Eloquent загружать отношения с sql JOIN вместо генерации отдельных sql запросов? - PullRequest
0 голосов
/ 06 января 2020

Я разработчик из Cake PHP и делаю свой первый проект с Laravel. В Cake PHP, когда я определял модель и ее отношения, была возможность установить стратегию объединения для отношения: strategy (join или select). По умолчанию он использует join, и когда я загружаю связанную модель, он делает это в одном запросе, добавляя оператор JOIN. При желании вы можете использовать select, который будет генерировать отдельный запрос.

Теперь, когда я использую готовую загрузку в Laravel, например:

$user = App\User::with(['articles'])->first();

Это фактически приводит к генерируются два запроса: один для получения записи пользователя и один для получения связанных статей. Это так же, как если бы я указал стратегию select в моей модели Cake PHP. Однако вместо этого я бы хотел использовать стратегию join, чтобы можно было упорядочивать или фильтровать по столбцу связанной таблицы. Я еще не нашел способ сделать это. Существует ли что-то подобное в laravel / eloquent?

1 Ответ

0 голосов
/ 06 января 2020

С Laravel это довольно простая загрузка записей с помощью Joins. Предполагается, что соединение по левому краю является примером кода для извлечения ваших записей: (Вы также можете использовать любое соединение, наиболее подходящее для ваших нужд)

//assuming **title** and **description** as amongst the article fields
// and that you've passed the user's id as **$user_id**
//I've also assumed the articles table has a user id field **user_id** which has the corresponding user's id.
    $user = App\User::leftJoin('articles','users.id','articles.user_id')
->where('users.id',$user_id)
->select('users.*','artcles.title as title','articles.description as description')
->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...