Laravel BelongsToMany如何根据条件检索模型值

时间:2013-05-24 07:40:30

标签: php laravel laravel-4 eloquent

现在我有3张桌子

衬衫

id type 

颜色

id color

color_shirt

id color_id shirt_id  

衬衫型号

    public function colors()
{
    return $this->belongsToMany('Color');
}

衬衫控制器

 public function show($color)
    {
        $color = Shirt::find('round_collar')->color();
    }

它会返回所有颜色的圆领衬衫,如果我想要返回特定的颜色怎么办?

它不能以下列方式工作:

$color = Shirt::find('round_collar')->colors()->where('color','=','red');

当我引用文档http://four.laravel.com/docs/eloquent#many-to-many时,它似乎没有示例。有谁知道答案?

2 个答案:

答案 0 :(得分:0)

尝试在最后添加 - > get()或 - > first(),如下所示:

$color = Shirt::find('round_collar')->color()->where('color','=','red')->get();

答案 1 :(得分:0)

您可以使用' Eager Loading Constraints' (http://laravel.com/docs/eloquent#eager-loading

Shirt::find('round_collar')->with(array('colors' => function($query) {
    $query->where('color', '=', 'red');
}))->first();

作为旁注,我怀疑你是否想以这种方式使用find(' round_collar')。你可能想要在哪里('领',' =',' round')代替。