Laravel Eloquent Relationship Undefinded Property

时间:2016-11-18 14:55:53

标签: laravel model eloquent relationship

我有一个模型class Account extends Model { public function users() { return $this->hasMany('\App\User', 'account_id', 'id'); } /** * @return integer[] */ public function getUserIds() { return $this->users()->getQuery()->select('id')->pluck('id'); } 和一个模型House

房子只有一个能量等级。能源类可以分配给多个房屋。因此我定义了这样的关系:

House.php

energy_class

energy_class.php

class House extends Model
{
    public function energy_class()
    {
        return $this->hasOne('App\energy_class', 'id', 'energy_class');
    }
}

将众议院数据传递给这样的视图时:

class energy_class extends Model
{
    public function house()
    {
        return $this->belongsToMany('App\House');
    }
}

并在这样的视图上引用它:

$house = House::with('energy_class')->find($id);
return view('admin.houses.edit')->with('house', $house);

我收到此错误:$house->energy_class()->name

当这样做时:Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$name我得到$house->energy_class->name

1 个答案:

答案 0 :(得分:2)

您的第一个建议:

$house->energy_class()->name

不起作用,因为此时你只调用了这种关系,你还没有从中指定你想要的东西,例如:

$house->energy_class()->first()

你的第二次尝试返回空,因为$ house-> energy_class(与上面的代码相同),没有返回任何结果。

可能有多种原因:

  • 您的关系未正确注册
  • 您的数据库设置不正确(您是否在迁移中设置了外键?)
  • 房子实际上没有填写能量等级

我怀疑你的情况可能是第二次或第三次。你能粘贴我的迁移脚本吗?

编辑:PS。如果发生此错误,因为可能并非每个房子实际上都有能量等级,您可以使用以下代码来检查:

$house->energy_class ? $house->energy_class->name : "No energy class available";