Что эквивалентно тому, что принадлежит Laravel Eloquent в сыром MySQL - PullRequest
0 голосов
/ 23 ноября 2018

Наверное, тупой вопрос.Но скажем, у меня есть 2 таблицы, teams и images.Таблица teams имеет поле image_id.В моей модели Eloquent для Team у меня есть:

public function image()
{
    return $this->belongsTo('App\Image');
}

Когда я хочу получить имидж команды, я вызываю $team->image.Что я хочу сделать, это сделать этот запрос в сыром MySQL.Пока у меня есть это:

SELECT teams.*, images.*  
FROM `teams` 
    LEFT JOIN images ON teams.image_id = images.id 
WHERE teams.id = 1

Это правильный подход?Можно ли это улучшить?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Это правильный запрос SQL?

ДА

Можно ли его улучшить?

ДА

Выберите только изображение.Например:

SELECT images.url as image_url  
FROM `teams` 
    LEFT JOIN images ON teams.image_id = images.id 
WHERE teams.id = 1
0 голосов
/ 23 ноября 2018

Если вы используете следующую команду:

\DB::enableQueryLog();

//do query
$team = Team::all();
$image = $team->image;

dd(\DB::getQueryLog());

У вас будет такой вывод:

select * from teams

select * from images where team_id = ? (? => the team id number)

Laravel использует шаблон ActiveRecord.Вы можете погуглить это.Таким образом, Laravel не использует JOIN, но последовательностей select.

Вы ищете именно тот запрос, который у вас есть:

SELECT teams.*, images.*  
FROM `teams` 
LEFT JOIN images ON teams.image_id = images.id 
WHERE teams.id = 1

Но под капотом этоЛаравел не так делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...