【发布时间】:2021-06-27 00:34:48
【问题描述】:
我有一个像这样的Contact 命名模型:
class Contact extends Model
{
public $timestamps = false;
protected $primaryKey = 'contact_id';
protected $fillable = [
'tel', 'fax', 'email', 'mob', 'address'
];
public function contactable ()
{
return $this->morphTo();
}
}
上述模型可以属于其他模型,例如House这样的模型:
class House extends Model
{
protected $primaryKey = 'house_id';
public function contact ()
{
return $this->morphMany('App\Contact', 'contactable');
}
}
每个House只能有一个相关的Contact,但是由于Contact模型可以与其他模型相关,所以我必须定义多态关系。
现在,当我想获得特定 House 模型的相关 Contact 模型时,即返回一个 Contact 数组(只有一个元素)把它作为一个简单的对象模型;例如:
public function edit (\App\House $house)
{
$house = $house->load('contact');
return $house;
return view('admin/pages/house/house-edit', compact('house'));
}
结果是这样的:
{
"house_id": 6,
"title": "testا",
"header": "0f74e9aa891bcc6fb84aa744721d9692.jpg",
"type": "sara",
"creator": 1,
"created_at": "2016-07-26 15:19:31",
"updated_at": "2016-07-26 15:19:31",
"contact": [
{
"contact_id": 1,
"tel": "1",
"fax": "2",
"email": "3",
"mob": null,
"contactable_id": 6,
"contactable_type": "App\\House"
}
]
}
我尝试在关系上使用first() 方法:
public function contact ()
{
return $this->morphMany('App\Contact', 'contactable')->first();
}
但是我收到了这个错误:
调用未定义的方法 Illuminate\Database\Query\Builder::addEagerConstraints()
这个问题的解决方法是什么?
【问题讨论】: