同一主题存在很多问题,但在我的代码中,我没有看到我的错误
尝试获取非对象的属性
我的模特似乎也没问题。该问题可能来自我的数据库关系吗?
家长
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
答案 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
,并且会抛出错误。