在Laravel模型中从Limit()切换到First()

时间:2018-06-13 14:14:01

标签: laravel laravel-5 eloquent

我遇到了一个问题,我正试图清理提交给我的代码,我觉得我必须在这个问题上花费太长时间才能看到这个问题。

目前我的一个模型中有以下代码:

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

2 个答案:

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