试图获取非对象的属性 - Laravel

时间:2018-03-26 14:38:22

标签: php laravel

同一主题存在很多问题,但在我的代码中,我没有看到我的错误

  
    

尝试获取非对象的属性

  

我的模特似乎也没问题。该问题可能来自我的数据库关系吗?

家长

  public function up()
    {

        Schema::create('parents', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('phone');
            $table->integer('user_id')->unsigned()->nullable();
            $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade'); 

            $table->timestamps();
        });
    }

儿童

public function up()
    {
        Schema::create('children', function (Blueprint $table) {
            $table->increments('id');
            $table->string('parent_phone')->references('phone')->on('parents')->onUpdate('cascade')->onDelete('cascade'); 
            $table->timestamps();
        });
    }

ChildModel

public function parents(){
      return $this->belongsTo(Parent::class, 'parent_phone');
  }

查看

 @foreach ($item->parents as $parent)
        <td>{{ $parent->child }} <br/>
        <small>{{ $parent->created_at }}</small>
        <br>
        <small>{{ $parent->parents->name }}</small>

        </td>
      @endforeach

1 个答案:

答案 0 :(得分:1)

你们的关系不太对劲。

由于您的外键(parent_phone)未引用id表上的主键(parents),因此您需要在parents上指定字段的名称它引用的。这是使用belongsTo()方法的第三个参数完成的。你的关系应该是这样的:

public function parents(){
    return $this->belongsTo(Parent::class, 'parent_phone', 'phone');
}

您可以阅读有关Eloquent relationships in the documentation here.

的更多信息

即使在更正了关系之后,由于以下行,您的视图仍可能会返回此错误:

{{ $parent->parents->name }}

如果您的parent记录没有parent记录,您将尝试访问->name上的null,并且会抛出错误。