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

标签 php mysql laravel laravel-4 eloquent

我正在尝试查询我的 Laravel 模型。我需要属于 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.*');
}

我的数据库:看起来像:

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)。

但是这不起作用。

最佳答案

您可以为此使用 Eloquent 关系: http://laravel.com/docs/eloquent#relationships

产品型号:

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();

这仅选择parent_id为1的类别。并且仅当它包含带有评论的产品时才选择。如果没有带有评论的产品,它将返回一个空数组。

关于php - Laravel 如何从 3 个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24887216/

相关文章:

php - 2 个具有相同命名列的表不起作用

javascript - 根据单击的 Div 更新数据库

php - 将行插入 mysql 时忽略错误和不匹配类型

mysql - "where in"子句的实际限制

php - 一次插入多个数据

laravel - Laravel指定与 `.env`不同的名称或将ingore设为 `.env`,以免与docker和docker-compose冲突

php - 发送批量请求

mysql - 删除MySQL中的重复记录,包括原始记录

mysql - 将日期时间值与 null 进行比较时,日期时间值不正确

php - 如何在 Composer (laravel 4)中删除保存的用户名和密码