只获得雄辩的主要专栏

时间:2014-09-24 18:05:30

标签: php laravel eloquent

我想检索有关属于Eloquent餐厅类别的产品的所有数据。所以我要这样做:

$restaurant->products()->where((new Product())->getTable().'.id', $id)->first();

但是这个代码在这个请求中被转换了:

select * from `if_products` 
inner join `if_products_categories` on `if_products_categories`.`id` = `if_products`.`product_category_id` 
where `if_products`.`deleted_at` is null and `if_products_categories`.`restaurant_id` = '1' and `if_products`.`id` = '2' 
limit 1

所以我从if_products和if_products_categories中检索所有列。由于两者都有name列,因此我在此处检索类别的名称,而不是类别的名称,而不是产品的名称。

与往常一样,我可以用这个来处理:

[...]->first(array((new Product())->getTable().'.*'))

但它太不方便了......正如我之前的问题(Eloquent request : column ID ambiguous),我认为Eloquent开始浪费时间......

而你,你会怎么处理这个?

修改

以下是关于我的模型的一些额外信息:

class Restaurant extends Eloquent
{
    public function products()
    {
        return $this->hasManyThrough('Product', 'ProductCategory');
    }

    public function productsCategories()
    {
        return $this->hasMany('ProductCategory');
    }
}

class ProductCategory extends Eloquent
{
    public function products()
    {
        return $this->hasMany('Product');
    }

    public function restaurants()
    {
        return $this->belongsTo('Restaurant');
    }
}

class Product extends Eloquent
{
    public function category()
    {
        return $this->belongsTo('ProductCategory', 'product_category_id');
    }
}

我试图让产品(ID 2)确定它属于餐厅(ID 1),这就是我通过餐厅模型的原因。

1 个答案:

答案 0 :(得分:-1)

不完全确定你的意思,但也许你正在寻找这个:

class Product extends Eloquent {
    public function category(){
        return $this->belongsTo('Category');
    }
}

class Category extends Eloquent {
    public function restaurant(){
        return $this->belongsTo('Restaurant');
    }
    public function products(){
        return $this->hasMany('Product');
    }
}

class Restaurant extends Eloquent {
    public function categories(){
        return $this->hasMany('Category');
    }
}

然后在控制器中:

$products = $restaurant->where(...condition...)
    ->categories()->where(...condition...)
    ->products()->get()