我现在陷入困境,希望有人能帮助我。我正在使用多态关系,并希望在我的数据库中搜索满足“父”表和“子”表中条件的行。
要得到具体的一个小例子。鉴于以下结构,例如,想要寻找价格“600”和房间“3”的房产。有没有办法用雄辩的方式做到这一点?
表格属性(父级)
表公寓(儿童)
表格宗地(子)
类属性
public function details() {
return $this->morphTo();
}
Classes Apartment + Parcel
public function property() {
return $this->morphMany('Property', 'details')
}
很多,真的。但不知何故,我总是做错事或遗失某些事情。在我看来应该有效的解决方案是:
Property::with(array('details' => function($query) {
$query->where('rooms', 3);
}));
或
Property::with('details')
->whereHas('details', function($query) {
$query->where('rooms', '=', '3');
});
但是在这两种情况下我都得到以下FatalError。:
Class name must be a valid object or a string
你们有没有人遇到过类似的问题?非常感谢您的任何暗示。
答案 0 :(得分:3)
让我们从您的命名约定开始:
public function detail() // It relates to a single object
{
return $this->morphTo();
}
和
public function properties() // It relates to several objects
{
return $this->morphMany('Property', 'details')
}
然后你就可以做到这一点:
$properties = Property::whereHas('details', function($q)
{
$q->where('rooms', '=', '3');
})
->where('price', '=', 600)
->get();
请注意,由于没有包含房间的包裹,因此永远不会退回包裹。