【问题标题】:Laravel relation error - Trying to get property of non-objectLaravel 关系错误 - 试图获取非对象的属性
【发布时间】:2015-11-02 18:15:24
【问题描述】:

我正在尝试获取已设置的关系的 ID。

平板模型

public function plateContainer()
{
    return $this->belongsTo('App\Models\PlateContainer');
}

PlateContainer模型

public function plate()
{
    return $this->hasMany('App\Models\Plate');
}

public function equipmentStatusCode()
{
    return $this->hasOne('App\Models\EquipmentStatusCode');
}

设备状态代码型号

public function plateContainer()
{
    return $this->belongsTo('App\Models\PlateContainer');
}

当我尝试时。

    $p  = Plate::findOrFail(4);
    $p->plateContainer->equipmentStatusCode;

  return $p;

我收到Trying to get property of non-object。我做错了什么?

【问题讨论】:

  • plateContainer 不是$p 的属性,而是一种方法。这就是您收到错误的原因。
  • @Daan 我该如何解决这个问题?
  • 指定表plates和equipment_status_codes的表结构

标签: php laravel


【解决方案1】:

试试这个:

我只是试图创造一个类似的情况。我同样修改了代码:

$p  = Plate::findOrFail(4);

$p->equipmentStatusCode->plateContainer;
return $p;

我能够获取结果数组。

【讨论】:

  • 这是我的错。这个工作得到第一个错误是因为我的数据库中没有任何内容(我知道这很愚蠢)。感谢大家的努力!
  • 很高兴您找到了解决方案。谢谢:)
【解决方案2】:

plateContainer 和 equipmentStatusCode 是一个函数。使用圆括号。

将以下关系添加到板模型:

public function equipmentStatusCode()
{
    return $this->hasManyThrough('App\Models\EquipmentStatusCode', 'App\Models\PlateContainer');
}

然后尝试:

$p  = Plate::findOrFail(4);
$p->equipmentStatusCode();

return $p;

【讨论】:

  • 我已经尝试过了。我收到Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$equipmentStatusCode
  • 您必须在设备状态代码后添加圆括号。我编辑了我的答案。
  • 我试了一下你的更新代码,现在我得到了Call to undefined method Illuminate\Database\Query\Builder::equipmentStatusCode()
  • 哦,是的,你必须使用 hasManyThrough 关系。请试一试!
猜你喜欢
  • 2017-09-02
  • 1970-01-01
  • 2016-06-13
  • 2018-06-02
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多