laravel reverse polymorph issue

时间:2015-06-10 09:56:43

标签: php laravel polymorphism laravel-5

在laravel我有桌子推车,cart_products,测试,包。 - 我需要使用laravel ORM将这些表关联起来。在cart_products表中,有时它会进行测试,有时它会有包。那我应该如何联系他们呢? 在购物车模型中就像是

public function products(){
        return $this->hasMany('HbDiagnostic\Models\CartProduct');
    }

获取数据......

"products": [
        {
            "id": "1",
            "cart_id": "1",
            "productable_id": "2",
            "productable_type": "test",
            "quantity": "1",
            "created_at": "2015-06-10 07:23:59",
            "updated_at": "2015-06-10 07:23:59"
        },
        {
            "id": "2",
            "cart_id": "1",
            "productable_id": "1",
            "productable_type": "package",
            "quantity": "1",
            "created_at": "2015-06-10 07:23:59",
            "updated_at": "2015-06-10 07:23:59"
        }];

现在我还需要测试细节和包装细节以及每种产品。 请帮助我,我尝试了一些方法,但没有做对。

谢谢, sanjit

2 个答案:

答案 0 :(得分:0)

我也是Laravel的初学者,但我理解Eloquent就像这样

1:N = hasMany

N:1 = BelongTo

N:N = BelongToMany

所以你有4个Cart Cart,cart_product,test,package

如果我理解这些表,它应该是4个Base table和1个Composite table(Cart_product)

购物车,产品,测试,包装和Cart_Produ_Product(复合表)

关于关系请参阅下面的链接

http://daylerees.com/codebright/eloquent-relationships

http://laravel.com/docs/4.2/eloquent

答案 1 :(得分:0)

@Chanom,感谢您的回答,但我的查询与标签测试和包装有cart_product表有关,最后它对我有用... 关系就像:

Model CartProduct:
public function productable(){
        return $this->morphTo();
    }

Model Test :
public function cart_product(){
        return $this->morphMany('HbDiagnostic\Models\CartProduct', 'productable');

Model Package :
    public function cart_product(){
            return $this->morphMany('HbDiagnostic\Models\CartProduct', 'productable');

And finally i am retrieving results like 
$cartProduct=CartProduct::Query()->where('cart_id',$cart->id);
            return $cartProduct->with('productable')->get();
    }

这些链接对我帮助很大.. Laravel - Eager Loading Polymorphic Relation's Related ModelsLaravel: Returning the namespaced owner of a polymorphic relation