Laravel Eloquent子查询使用3个表

时间:2017-10-10 18:01:11

标签: laravel-eloquent

此查询的目标是查找所有具有与其关联的名称为“email_small”的图像类型的Stories。并非所有故事都有图像。

涉及三个表/模型:Storys,StoryImage和ImageTypes

一个故事可以有很多故事图像

/* Story model */
public function storyImages()
{
    return $this->hasMany(StoryImage::class);
}

故事图像有一种图像类型

/* Storyimage model */
public function imgtype()
{
    return $this->belongsTo('App\Imagetype','imagetype_id');
}

我可以通过图像选择所有故事的第二步,但我在子查询中迷失了

$stories  = Story::whereHas('storyImages', function($query){
               $query->where($query->imgtype()->name, '=', 'email_small');
            })
            ->->get();

1 个答案:

答案 0 :(得分:1)

为什么不能使用两个查询?首先选择名称为#34的imgType的ID; email_small"然后检查该ID:

$id = Imagetype::where('name', 'email_small')->first()->id;
$stories = Story::whereHas('storyImages', function($q) use ($id) {
    $q->where('imagetype_id', $id);
})->get();

我确信即使你在一个函数中编写所有内容,Laravel仍然会调用一些查询。