如何在连接表中添加条件?

时间:2016-08-05 15:12:26

标签: laravel laravel-5.2

我有两个表:UsersImages

因此,用户可以拥有一些图像。

对于这种关系,我在模型User中有额外的功能:

public function images()
{
    return $this->hasMany('App\Images', 'idElement', 'id');
}

在控制器中我有:

$users = Users::where('id', $id)->with("images")->get();

如何在images table的{​​{1}}的控制器中添加其他条件?

现在这些表只能通过主键连接,但我还需要设置一个新条件。

2 个答案:

答案 0 :(得分:3)

您可以使用回调功能过滤图片,请尝试以下操作:

$users = Users::where('id', $id)->with(["images" => function ($query){
    $query->where('type', 1);   
}])->get();

答案 1 :(得分:2)

对于类似这样的内容,您希望根据类型对图像的子集进行范围缩小,您可以添加另一种称为public function scopedImages()的方法,并将其定义为:

public function scopedImages() {
    return $this->hasMany('App\Images', 'idElement', 'id')->where("images.type", "=", 1);
}

在您的控制器中,您将像访问images()上的User功能一样访问此功能:

$users = Users::where('id', $id)->with(["scopedImages"])->get();

保留函数images(),因此如果您需要查找附加到User的所有图像,但添加此类附加功能可让您灵活处理要返回的内容以及何时返回。< / p>