Laravel Eloquent 在结果中附加一个非关系数据
Posted
技术标签:
【中文标题】Laravel Eloquent 在结果中附加一个非关系数据【英文标题】:Laravel Eloquent appending a non-relation ship data with the result 【发布时间】:2021-06-30 19:03:02 【问题描述】:我有这个模型文件:-
namespace App;
use Illuminate\Database\Eloquent\Model;
class Observation extends Model
protected $fillable = ['observation', 'recommendation', 'priority', 'report_asset_id'];
protected $appends = ['facility'];
public function attachments()
return $this->hasMany('App\ObservationAttachment');
public function report_facility()
return $this->belongsTo('App\ReportFacility');
public function getFacilityAttribute()
return $this->report_facility()->facility;
这是我的查询代码:-
$observations = Observation::orderBy('created_at','desc')
->with('attachments')->get();
return response()->json($observations);
我正在尝试将 getFacilityAttribute 附加到结果数组中。
我尝试使用受保护的 $append 模型数组但出现错误:-
调用未定义的方法 Illuminate\Database\Eloquent\Relations\BelongsTo::facility()
【问题讨论】:
【参考方案1】:以下行不正确:
return $this->report_facility()->facility
您正在启动一个查询,将 report_facility
作为函数 (report_facility()
) 调用,返回一个查询构建器对象,其中 facility
函数是未知的。
你应该这样做:
return $this->report_facility->facility
在这种情况下,eloquent 将为您提供 ReportFacility 模型,您可以从中检索设施属性或关系。
类似于:
return $this->report_facility()->first()->facility
【讨论】:
另外,很高兴使用return optional($this->report_facility)->facility;
。以上是关于Laravel Eloquent 在结果中附加一个非关系数据的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent - 附加与 SyncWithoutDetaching
在 laravel 中定义 eloquent 关系时添加额外的约束