可能是一个愚蠢的问题。但是说我有2个表,teams
和images
。 teams
表具有字段image_id
。在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
这是正确的方法吗?可以改善吗?
答案 0 :(得分:2)
如果使用以下命令:
\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
但是,在幕后,这不是Laravel的方式。
答案 1 :(得分:0)
这是正确的SQL查询吗?
是
可以改进吗?
是
仅选择图像。例如:
SELECT images.url as image_url
FROM `teams`
LEFT JOIN images ON teams.image_id = images.id
WHERE teams.id = 1