我想检索有关属于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),这就是我通过餐厅模型的原因。
答案 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()