gpt4 book ai didi

Laravel/ Eloquent : Search for rows by value in polymorphed table

转载 作者:行者123 更新时间:2023-12-04 02:31:57 25 4
gpt4 key购买 nike

我现在卡住了,希望有人能帮我一把。我正在使用多态关系并希望在我的数据库中搜索满足“父”表和“子”表中条件的行。

为了更具体,举一个小例子。给定以下结构,例如想寻找价格为“600”且房间数为“3”的特性。有没有办法用 eloquent 做到这一点?



表格

表属性(父级)

  • 编号
  • 价格
  • details_type [可以是“公寓”或“包裹”]
  • 详细信息_id

table 上公寓( child )

  • 编号
  • 房间

表包(子)

  • 编号
  • ...(没有“房间”列)



关系

类属性

public function details() {
return $this->morphTo();
}

Classes 公寓 + 包裹

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



你们中有人遇到过类似的问题吗?非常感谢您的任何提示。

最佳答案

让我们从您的命名约定开始:

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();

请注意,这永远不会返回包裹,因为没有带房间的包裹。

关于Laravel/ Eloquent : Search for rows by value in polymorphed table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com