我遇到了一个问题,我正试图清理提交给我的代码,我觉得我必须在这个问题上花费太长时间才能看到这个问题。
目前我的一个模型中有以下代码:
public function attachments(){
return $this->hasMany(volunteerAttachment::class, 'volunteerID','id');
}
public function photoID() {
$photoID= $this->attachments()->where('category','Drivers License')->orderBy('endDate','desc')->limit(1);
return $photoID;
}
我想要做的是用简单的limit(1)
替换函数photoIdentification
的{{1}}相对简单。
但是,当我尝试将first()
放入我的刀片时,它只会返回错误{{$volunteer->photoID->id}}
。
但我确实知道存在关系,因为如果我继续使用App\volunteer::photoID must return a relationship instance
并放置:
limit(1)
它正确返回关系和文档。
@foreach($volunteer->photoID as $id)
{{$id->id}}
@endforeach
是该特定模型$volunteer
的变量,以下是它在控制器中的定义方式:
App\volunteer
答案 0 :(得分:1)
函数photoID()
仍将返回完整的volunteerAttachment
对象。如果您想使用first()
函数获取id,则必须选择对象上的id
属性,如下所示:
{{ $volunteer->photoID()->id }}
您还可以在模型上create an accessor直接返回此属性:
public function getPhotoidAttribute($value)
{
return $this->attachments()->where('category','Drivers License')->orderBy('endDate','desc')->first()->id;
}
现在在刀片中你可以使用:
{{ $volunteer->photoid }}
答案 1 :(得分:0)
当您将模型的函数作为变量调用时,Laravel假定您尝试返回相关模型。请尝试使用accessor代替:
public function getPhotoidAttribute($value) {
$photoID= $this->attachments()->where('category','Drivers License')->orderBy('endDate','desc')->first();
return $photoID->id;
}
并将其称为:
{{ $volunteer->photoid }}