2015-02-10 88 views
0

我试图使用Laravel 5(L5)Model :: with()方法获得具有给定类别的产品的简单列表。但是L5似乎忽略了where子句的分类。Laravel 5 Model :: with()行为

在我的产品型号的关系:

public function categories(){ 
    return $this->belongsToMany('App\Category', 'categories_products'); 
} 

在我的控制器:

public function getByCategory($slug){ 
    $return = Product::with(array('categories' => function($query) use ($slug){ 
     $query->where('slug', 'like', $slug); 
    }))->paginate(60); 
    dd($return); 
} 

结果是在我的数据库中的每个产品的列表,而不是仅仅是那些具有列表给予类别slu。。

我试过硬编码在某些不同的where子句中,但似乎都忽略了。我错过了什么吗?

+0

我不熟悉laravel。但是,您可以使用Xdebug进行调试。当然,这会帮助你很多。对于Xdebug配置,您可以使用此链接http://blog.thecodingmachine.com/content/setting-xdebug-debugging-environment-php-wamp-eclipse-pdt – 2015-02-10 12:05:50

回答

1

雄辩不使用连接来查询相关数据与()一起使用时,而是使用单独的查询。在你的例子中,它首先提取产品,然后提取相关的类别。

您需要使用has() or whereHas()才能返回具有类别(slu??)的产品。

public function getByCategory($slug){ 
    $return = Product::has('categories')->with(array('categories' => function($query) use ($slug){ 
     $query->where('slug', 'like', $slug); 
    }))->paginate(60); 
    dd($return); 
} 

或者:

public function getByCategory($slug){ 
    $return = Product::whereHas('categories', function($query) use ($slug){ 
     $query->where('slug', 'like', $slug); 
    })->paginate(60); 
    dd($return); 
} 

whereHas()补充说,统计数量关系的子查询。您应该使用DB :: getQueryLog()来查看Eloquent产生的SQL。使它更容易找出发生了什么!

+0

第二个例子似乎给我想要的结果,谢谢。虽然它真的(我的意思是真的)很慢!但我会将其标记为答案。 – TheNish 2015-02-10 15:25:46

+0

您的第一段应该包含在有关急切加载的官方文档中。 – user2094178 2015-02-10 17:03:37

0

您是否需要先进的子查询?如果塞在产品定义为一列,你可以这样做:

$return = Product::where('slug', 'like', $slug)->paginate(60); 
dd($return); 

或者,如果使用关系查询应该是这样的:

$return = Product::where('slug', 'like', $slug)->categories->paginate(60); 
dd($return); 
+0

您的第一个示例将仅列出具有给定slug的产品(我假设),而不是那些给予slu(的类别(这是我想要的)。第二个示例导致ErrorException“非静态方法App \ Product :: categories()不应被静态调用,假设$ this来自不兼容的上下文” – TheNish 2015-02-10 15:00:54

+0

根据您的问题:我正在尝试获取产品的简单列表一个给定的类别。我的第二个失败了......哎呀,我不确定这是否完全正确,但值得一试。 – Joey 2015-02-10 15:09:08

+0

强调:“与给定类别”。含义:我有一个类别slu and,我想要一个产品清单,它与给定slu categories的类别有关。 – TheNish 2015-02-10 15:12:07