与原始MySQL中的Laravel Eloquent的belongsTo等效

时间:2018-11-23 15:08:13

标签: php mysql laravel eloquent

可能是一个愚蠢的问题。但是说我有2个表,teamsimagesteams表具有字段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

这是正确的方法吗?可以改善吗?

2 个答案:

答案 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