laravel父母关系所属

时间:2014-10-09 05:04:21

标签: php laravel

我在输出关系数据方面遇到问题我试图从producttypes类中获取标题它试图获取非对象的属性,我尝试了各种方法但是我没有得到所需的结果

class Product extends \Eloquent {

    public function producttype() {
        return $this->belongsTo('ProductTypes', 'producttype_id');
    }

}

class ProductTypes extends \Eloquent {

    public function products() {
        return $this->hasMany("Product", 'id');
    }
}

$product->producttype->title

更新

class ProductTypes extends \Eloquent {
    protected $fillable = ['keywords', 'description', 'title', 'slug'];
    protected $table = "producttypes";

    public function products() {
        return $this->hasMany("Product", 'product_id', 'id');
    }
}

class ProductVariations extends \Eloquent {
    protected $table = "productvariations";
    protected $fillable = ['product_id', 'producttype_id', 'price', 'quantity', 'discount', 'image'];


    public function product() {
        return $this->belongsTo('Product');
    }
}

public function show($id)
{
    $product = Product::with('producttype')->findOrFail($id)->get();

    return View::make('products.show')->withProduct($product);
}

显示页面

$product->producttype->title

2 个答案:

答案 0 :(得分:0)

您必须以这种方式获取数据库值

$product = Product::with('producttype')->get()

试试这个。

请将此代码放在您其他所有内容的routes.php文件中..仅用于测试目的。

Route::get('/', function(){
     $product = Product::with('producttype')->get();
     dd($product);
});

get()方法将在具有多个对象的Arrays中返回结果,而firstOrfail将仅返回对象。这就是为什么你得到非对象方法调用异常的原因。尝试dd()结果集,你就会知道

答案 1 :(得分:0)

您应该确保查询返回一个对象而不是一个集合。如果您使用where查询,则会获得一组对象,除非您在查询中添加 - > firstorfail()。 如果您正在使用' Model :: Find(id)'然后你得到了对象,所以你可以使用这个方法。 请查看该部分末尾的红色注释querying-relations

你应该试试

public function show($id)
{
    $product = Product::Find($id);

     return View::make('products.show',['product'=>$product]); 
}

然后在您的视图中,可以访问产品方法

 $product->producttype;
 $product->productvariation //You should add this method to the product class