【问题标题】:Laravel error. Trying to get property of non-objectLaravel 错误。试图获取非对象的属性
【发布时间】:2018-11-25 02:02:53
【问题描述】:

我有两个表之间的关系:提案和主管。我正在检索所有提案并将它们传递给视图。我想要的是打印提议的人的名字。表“提案”有一个列“Supervisor_ID”。

注意:几天前代码运行良好,但现在出现此错误。

提案.php

public function supervisor(){

    return $this->belongsTo('App\Supervisor');

}

Supervisor.php

public function proposals(){

    return $this->hasMany('App\Proposal','id', 'supervisor_ID');

}

index.blade.php

@foreach($proposals as $proposal)
     {{$proposal->supervisor->last_name}}, {{$proposal->supervisor->first_name}}

@endforeach

【问题讨论】:

  • 更新你的控制器代码
  • 好像有些提案在数据库中没有主管。
  • 提案表中只有一个条目,并且有一个主管ID。

标签: php laravel


【解决方案1】:

我认为您在调用时不包括supervisor 关系。为此,您应该在 Proposal.php 文件中添加以下行

 protected $with = ["supervisor"];

【讨论】:

  • 如果关系不是预先加载的(通过调用with('relation') 手动或通过您描述的方法),它将在第一次调用时由 Eloquent 框架延迟加载。但这仅在正确设置关系方法时才有效。
【解决方案2】:

您的关系定义错误。 supervisor() 关系可能不起作用,因为您使用的列名不遵循 Laravel 默认模式(但由于大多数 SQL 系统在列名时不区分大小写,因此出现此问题的可能性非常小) .但是另一方面,proposals() 关系的参数顺序错误,这肯定是一个问题。您还必须在 supervisor() 关系上添加其他参数。

解决上述问题后,您应该有如下内容:

// Proposal.php
public function supervisor()
{
    return $this->belongsTo(Supervisor::class, 'Supervisor_ID', 'id');
}

// Supervisor.php
public function proposals()
{
    return $this->hasMany(Proposal::class, 'Supervisor_ID', 'id');
}

请注意,我也将 supervisor_ID 更改为 Supervisor_ID,如您所写。另请注意,如果 Supervisor 类位于 App 命名空间中,则 Supervisor::classApp\Supervisor 的 PHP 常量。使用这种表示法不仅看起来更干净,而且还可以更好地对 IDE 和其他工具进行静态代码分析。

【讨论】:

    【解决方案3】:

    我已经尝试了建议的解决方案,其中一些显示了同样的问题。我通过删除模型关系中的所有附加参数解决了这个问题。事实证明,如果数据库中的表字段被相应地命名,框架会自动执行关系。

    当前工作代码:

    //Proposal.php
        public function supervisor(){
    return $this->belongsTo('App\Supervisor');
        }
    
    //Supervisor.php
    public function proposals(){
         return $this->hasMany('App\Proposal');   
        }
    

    谢谢你们:)

    【讨论】:

      猜你喜欢
      • 2016-06-13
      • 2018-06-02
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 2020-10-21
      相关资源
      最近更新 更多