我有我的类“ Product_reviews”,该类绑定到这样的类“ Products”:
Products.php:
public function products()
{
return $this->belongsTo('App\Products');
}
Product_reviews.php:
$products = Products::with('product_reviews')->get();
表“ Product_reviews”的外键是“ product_id”。
因此,在控制器中,我试图获取所有数据:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'product_reviews.products_id' in 'where clause' (SQL: select * from `product_reviews` where `product_reviews`.`products_id` in (1, 2))
而且...我有一个错误,说找不到product_id:
{{1}}
如果我错了,请纠正我,但是我认为查询生成器正在将“ _id”添加到类的名称中。可以通过转到表“ product_reviews”并通过'products_id'更改'product_id'来解决。或者也许我可以将所有类和表的名称传递为单数。
所以我的问题是:为了使查询生成器知道正确的列名,我还有什么其他选择?
答案 0 :(得分:2)
您的模型应以单数形式命名,然后Laravel将不会尝试在生成的SQL查询中使用列名的复数形式。
在您的情况下,Products
模型应称为Product
。请记住,模型代表数据库中的一个记录,因此单数形式是正确的。
您通过手动设置$this->hasMany(..)
关系中的外来字段来改写此行为,这种情况绕过了问题,但没有解决根本原因。
此外,您应该避免使用snake_cased类名,因为它违反了PSR。您的Product_reviews
模型应称为ProductReview
。
答案 1 :(得分:0)
好吧,我明白了
在 Products.php中:
return $this->hasMany('App\Product_reviews');
我为hasMany函数添加了2个参数,如下所示:
return $this->hasMany('App\Product_reviews','product_id','id');
这些参数指定ID的名称。
这篇文章确实有帮助:
laravel-hasmany-and-belongsto-parameters
无论如何,我认为从长远来看,按照Davit和hktang的话说,并以单数名称重命名我的班级可能会很好。感谢您的回答。