【问题标题】:Laravel Eloquent Relationship Undefinded PropertyLaravel Eloquent 关系未定义属性
【发布时间】:2017-04-02 11:33:10
【问题描述】:

我有一个模特House 和一个模特energy_class

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

House.php

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

energy_class.php

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 我得到trying to get property of non-object

【问题讨论】:

  • 能否显示数据库的表名和列名。
  • 表:houseenergy_classes。列:house.energy_classenergy_classes.name

标签: laravel model eloquent relationship


【解决方案1】:

您的第一个建议:

$house->energy_class()->name

不起作用,因为此时您只调用了关系,您还没有从中指定您想要的内容,例如:

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

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

这可能有多种原因:

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

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

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

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

【讨论】:

  • 这里是迁移的一部分:$table->integer('energy_class')->unsigned(); $table->foreign('energy_class')->references('id')->on('energy_classes'); 我要编辑的房子有一个 id 为 1 的能源类,它指的是一个名为A++的类
  • $house->energy_class()->first()->name 正在工作。但是没有first()不应该是可能的,因为关系应该告诉laravel只有一个相关记录......
  • 很奇怪 $house->energy_class->name 不起作用,但您的建议确实有效。很高兴听到您拥有所需的信息!您仍然必须先要求的原因是因为还有各种其他选项(例如,firstOrFail、firstOrCreate)可用。
猜你喜欢
  • 2019-08-12
  • 2020-01-26
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 2020-05-04
  • 2016-07-08
  • 2020-06-18
相关资源
最近更新 更多