我有一個Contact
命名模式是這樣的:添加約束morphMany在多態性關係laravel
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
模型可能與其他模型有關,我必須定義多態關係。
現在,當我想要獲取相關的特定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"
}
]
}
我試試先()方法來使用的關係:
public function contact()
{
return $this->morphMany('App\Contact', 'contactable')->first();
}
但是卻得到了這樣錯誤:
Call to undefined method Illuminate\Database\Query\Builder::addEagerConstraints()
什麼是解決方案?
感謝@TheFallen,根據您的解決方案,我添加了一個名爲'getContactAttribute'的訪問,並能簡化到聯繫人的訪問添加到'模型$ appends'財產模型。現在,當我獲得House模型時,相關聯繫人模型會作爲一個簡單屬性附加到它。 –
@AB.Developer很好,很高興它解決了:) – TheFallen