2017-06-02 82 views
0

我尝试选择3个相同类型的项目。这是我的尝试:如何选择项目类型3项目

public function show(Work $work) 
{ 
    $getSameType = Work::whereHas('type', function ($query){ 
     $query->where('name', 'Site web'); 
    })->whereNotIn('id', [$work->id])->get(); 
} 

它的工作原理,但我不得不手动输入名称。我希望它是动态的。

在我看来,我访问的类型是这样的:$work->type->name,或有塞$work->type->slug

所以我试图做同样的事情在我的查询,但我不确定变量作为错误。

public function show(Work $work) 
{ 
    $getSameType = Work::whereHas('type', function ($query){ 
     $query->where('name', $work->type->slug); 
    })->whereNotIn('id', [$work->id])->get(); 
} 

你能帮我吗?

非常感谢!

+0

我不知道这一点,但我相信你应该这样做,$ query-> where('name',$ work-> type-> name); OR $ query-> where('slug',$ work-> type-> slug); –

回答

2

你必须使用use为了使用像闭包内的变量:

public function show(Work $work) 
{ 
    $getSameType = Work::whereHas('type', function ($query) use ($work) { 
     $query->where('name', $work->type->slug); 
    })->whereNotIn('id', [$work->id])->get(); 
} 

PS:我没有测试上面的,但它应该工作

更多信息:http://php.net/manual/en/functions.anonymous.php

+0

很有意思,谢谢! – Jeremy