我有3个模型对象,即:Categories
,Category_products
& Products
分类
<?php
class Categories extends Model
{
protected $table = 'categories';
public function product_ids() {
return $this->hasMany("app\Models\categories\Category_products", "category_id", "id");
}
?>
Category_products:
<?php
class Category_products extends Model
{
protected $table = 'category_products';
public function product_ids(){
return $this->belongsTo('app\Models\categories\Category');
}
public function products(){
return $this->hasOne("app\Models\Product", "id", "product_id");
}
}
?>
和产品:
<?php
class Product extends Model {
protected $table = 'products';
public function product(){
return $this->belongsTo("app\Models\categories\Category_products");
}
?>
现在在我的CategoryController中我做:
$this->data["products"] = Categories::find($id)->product_ids()->products()->get();
但现在我收到了一个错误:
Call to undefined method Illuminate\Database\Query\Builder::products()
我怎样才能以正确的方式做到这一点?
答案 0 :(得分:2)
好的,我要试试。
我猜你在阅读Laravel文档时错过了一些东西。
您不必创建category_products模型,因为它是您的类别和产品之间的数据透视表。
“正常”,你应该有这样的东西:
产品:
. id
. name
分类:
. id
. name
category_product(按字母顺序排列的名称)
. product_id
. category_id
你的模特:
class Category extends \Eloquent {
public function products()
{
return $this->belongsToMany('namespace\to\your\model\Product');
}
}
class Product extends \Eloquent {
public function categories()
{
return $this->belongsToMany('namespace\to\your\model\Category');
}
}
然后您可以执行以下操作:
$this->data["products"] = Category::find($id)->products;
或
$this->data["products"] = Category::find($id)->products()->get();
Laravel会为您调用数据透视表。
用复数命名你的班级并不常见,习惯用他们的单数命名你的班级