【问题标题】:Laravel Eloquent appending a non-relation ship data with the resultLaravel Eloquent 在结果中附加一个非关系数据
【发布时间】: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()

【问题讨论】:

    标签: php laravel eloquent laravel-5.8 eloquent-relationship


    【解决方案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;
    猜你喜欢
    • 2021-01-26
    • 2018-01-11
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2015-06-16
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多