Laravel关系问题

时间:2014-05-26 13:09:48

标签: laravel laravel-4 eloquent

为什么现实必须如此努力?洛尔

我试图从附加到宠物模型的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');
    }

任何想法我做错了什么?谢谢!

2 个答案:

答案 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