为什么现实必须如此努力?洛尔
我试图从附加到宠物模型的Petphoto模型中获取imageName。在我的控制器中,我使用with()添加Petphoto模型但是当我使用$ pet-> photo-> imageName输出它时,它说:Undefined property: Illuminate\Database\Eloquent\Collection::$imageName
当我使用$ pet->照片时,创建的HTML为[{"imageID":114,"petID":189,"imageName":"P3080066.JPG","dateAdded":"2011-05-27 00:00:00","source":"local","weight":1}]
我的控制器:
$pets = Pet::with('photo','breed','secondbreed')->where('status',1)->paginate(50);
我的宠物模型:
public function photo(){
return $this->hasMany('Petphoto', 'petID', 'petID');
}
我的Petphoto模特:
public function pet(){
return $this->belongsTo('Pet');
}
任何想法我做错了什么?谢谢!
答案 0 :(得分:1)
关系很容易,很有说服力,你只是让它们变得有点困难;)
首先,我建议您始终恰当地命名关系:
// belongsTo, hasOne singular like:
public function pet()
{
return $this->belongsTo('Pet');
}
// hasMany, belongsToMany, hasManyThrough plural:
public function photos()
{
return $this->hasMany('Photo');
}
然后你不能这样做:
$pet->photos->imageName;
给你打电话$pet->photos
这是一个集合。
所以要使它工作,你需要遍历集合:
// assuming it's a blade template and relation's name is plural like I suggested
@foreach ($pet->photos as $photo)
<h1>{{ $photo->imageName }}</h1>
@endforeach
..或:
$pet->photos->first()->imageName;
答案 1 :(得分:0)
您尝试使用您的方法访问某个属性 - 我相信这种关系是一种方法。
要访问相关模型的属性,您需要使用此方法:
`$pet->photo()->imageName`
添加括号,然后使用方法(您已在模型中设置),然后您就可以访问加载的模型了。
如果您想获得相关模型的集合$pet->photo()->get()
这有点像一个问题,而且我经常不得不全身心投入。
TA