Laravel从第三张桌子返回财产

时间:2014-11-29 11:21:15

标签: php laravel laravel-4

我有三张桌子:

products
product_types
product_categories

products属于product_typesproduct_types属于product_categories

如何从product_categories开始products访问列?:

ProductTypes型号:

class ProductTypes extends Eloquent {

    public function category() {
        return $this->belongsTo('ProductCategories');
    }

}

产品型号:

class Product extends Eloquent {

    protected $table = 'products';

    public function brands() {
        return $this->belongsTo('ProductBrands', 'brand_id', 'id');
    }

    public function ages() {
        return $this->belongsTo('ProductAges', 'age_id', 'id');
    }

    public function types() {
        return $this->belongsTo('ProductTypes', 'type_id', 'id');
    }

    public function images() {
        return $this->hasMany('ProductImages');
    }

    public function reviews() {
        return $this->hasMany('ProductReviews');
    }

    public function toArray() {

        $ar = $this->attributes;

        $ar['brand'] = $this->brand;
        $ar['age'] = $this->age;
        $ar['type'] = $this->type;

        return $ar;
    }

    public function getBrandAttribute() {
        $brands = $this->brands()->first();
        return (isset($brands->brand) ? $brands->brand : '');
    }

    public function getAgeAttribute() {
        $ages = $this->ages()->first();
        return (isset($ages->age) ? $ages->age : '');
    }

    public function getTypeAttribute() {
        $types = $this->types()->first();
        return (isset($types->type) ? $types->type : '');
    }

}

我试过了:

$productData->types()->category()->category

但是这给出了一个错误,说该方法不存在。

对标题感到抱歉,无法想到一个。

1 个答案:

答案 0 :(得分:0)

问题是,您在执行types()时没有执行查询,因此您在查询构建器实例上调用category()而不是ProductTypes模型。

您可以使用动态属性访问关系的结果

$productData->types->category->category

还考虑重命名您的人际关系。目前你有"类型"例如,但它只返回一种类型,因为它是一对多的关系。 "类型"会更有意义。