多个属于滔滔不绝

时间:2015-05-26 14:35:48

标签: php eloquent laravel-5

我有3个模型对象,即:CategoriesCategory_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()

我怎样才能以正确的方式做到这一点?

1 个答案:

答案 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会为您调用数据透视表。

用复数命名你的班级并不常见,习惯用他们的单数命名你的班级

另见:http://laravel.com/docs/5.0/eloquent#many-to-many