我在输出关系数据方面遇到问题我试图从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
答案 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