Laravel Eloquent 关系返回试图获取非对象的属性'office_name'

Posted

技术标签:

【中文标题】Laravel Eloquent 关系返回试图获取非对象的属性\'office_name\'【英文标题】:Laravel Eloquent relationship return Trying to get property 'office_name' of non-objectLaravel Eloquent 关系返回试图获取非对象的属性'office_name' 【发布时间】:2021-06-30 01:15:06 【问题描述】:

这是我的雄辩关系-

public function owner()

    return $this->hasOne(Owner::class, 'owner', 'owner_name');

当我访问完整对象时-

 $dealer->owner 

我得到了对象


    "id": 11087,
    "office_name": "BHILWARA DTO ( RJ-6 )",
    "registration_number": "RJ06VS2840",
    "chasis_number": "MBLHAR076J4K00280",
    "owner": "GANESH LAL",
    "father_name": "KASTUR KUMAWAT",
    "address": "THALARAIPUR",
    "vehicle_class": "M-Cycle\/Scooter",
    "insurance_type": "COMPREHENSIVE",
    "insurance_company_name": "TATA AIG GENERAL INSURANCE CO. LTD.",
    "insurance_from": "2018-11-08",
    "insurance_up_to": "2019-11-07",
    "policy_number": "0189518728",
    "created_at": null,
    "updated_at": null

但是当我尝试从对象访问单个属性时 -

 $dealer->owner->office_name 

我收到错误

试图获取非对象的属性“office_name”

【问题讨论】:

我最好的猜测是$dealer 在 foreach 中,其中一个没有所有者 那我该怎么办? 可能有经销商在数据库中缺少所有者。 【参考方案1】:

当您尝试从没有 foreach 循环的模型数组对象中获取 office_name 时,您将得到以下内容。

试试这个

@foreach($dealer->owner as $de)

 $de->office_name 

@endforeach

【讨论】:

hasOne 关系返回模型而不是集合【参考方案2】:

根据 laravel 文档,这里是 hasOne 关系的语法,

return $this->hasOne(Phone::class, 'foreign_key', 'local_key');

所以在你的情况下,

return $this->hasOne(Owner::class, 'owner', 'owner_name');

第三个参数是所有者相关表中的本地键列。但是在你给定的对象中没有像 owner_name 这样的东西,所以关系应该是这样的:

return $this->hasOne(Owner::class, 'owner', 'owner');

【讨论】:

以上是关于Laravel Eloquent 关系返回试图获取非对象的属性'office_name'的主要内容,如果未能解决你的问题,请参考以下文章

laravel 返回与 eloquent 和 laravel 的关系

laravel:关系方法必须返回 Illuminate\Database\Eloquent\Relations\Relation 类型的对象

Laravel Eloquent发现并返回两种不同的类型?

试图在 laravel eloquent 中获取非对象错误的属性“名称”

无法在 Controller Laravel belongsToMany 关系中获取正确的数据 - Laravel / Eloquent [关闭]

Laravel 4 Eloquent 获取关系 ID