Php 如何从3个表Laravel中获取数据

Php 如何从3个表Laravel中获取数据,php,mysql,laravel,laravel-4,eloquent,Php,Mysql,Laravel,Laravel 4,Eloquent,我正试图查询我的拉威尔模型。我需要所有的产品从属于父类别的子类别id=1,我还需要审查属于这个产品。我怎么能得到它?我尝试了分类模型: public function scopeForProduct($query, $id) { $query->where('parent_id', $id)->join('products', 'products.category_id', '=', 'categories.id'); } public function scopeWit

我正试图查询我的拉威尔模型。我需要所有的产品从属于父类别的子类别id=1,我还需要审查属于这个产品。我怎么能得到它?我尝试了分类模型:

 public function scopeForProduct($query, $id)
{
    $query->where('parent_id', $id)->join('products', 'products.category_id', '=', 'categories.id');
}

public function scopeWithProductPhoto($query)
{
    $query->select('products.*');
}
我的db:看起来像:

Categories:
id | parent_id | name | desc
1     0            App   -
2     1          BBQ    subcat of app

Products:
id | category_id | name | description | photo | partner_link
1       2            Item

Reviews:
id | user_id | product_id | description | rating
1       3          1           -           5
我需要从属于父类别的子类别(例如,parent_id=1)中获取所有具有评论的产品


但是它不起作用。

你可以用雄辩的关系来解决这个问题:

产品型号:

public function reviews()
{
    return $this->hasMany('Review');
}

public function category()
{
    return $this->belongsTo('Category');
}
类别模型:

public function products()
{
    return $this->hasMany('Product');
}
审查模式:

public function product()
{
    return $this->belongsTo('Product');
}
查询:

$parent_id = 1;

$category = Category::with('products.reviews')
whereHas('products', function($q)
{
    $q->has('reviews');
})
->where('parent_id','=',$parent_id);
->get();

这只会选择父项id为1的类别。而且只有当它的产品中有评论的时候。如果没有包含评论的产品,它将返回一个空数组。

最简单的方法是
hasManyThrough

// Category model
public function subProducts()
{
   return $this->hasManyThrough('Product', 'Category', 'parent_id');
}
然后您可以简单地执行以下操作:

$category = Category::with('subProducts.reviews')->find($id);
$category->subProducts; // Collection of products belonging to $category subcategories

这将适用于1级嵌套子类别层次结构。

能否添加模型或有关数据库结构的更多信息?我不知道你想做什么。@Björn编辑了第一篇博文如果我有多个类别的父类id为1,它也会工作吗?你可以使用:->其中('parent_id',array(1,2,3))->get();不,不,我的意思是,如果我有多个子类别的父项id为1,那怎么办?我有这个问题,它不会返回属于产品的评论。如果我var_dump($category),它会返回类别,如果我var_dump($category->subProducts),我得到了
对象(illumb\Database\elount\Collection)#185(1){[“items”:protected]=>array(0){}