我在为项目中的搜索功能编写一个雄辩的查询时遇到了问题。 这是我的数据库表/模型:
artist
| id | name |
---------------------
| 1 | Van Gogh |
| 2 | Michelangelo |
art
| id | title |
---------------------
| 1 | David |
| 2 | Starry Night |
art_artist
| id | art_id | artist_id |
---------------------------
| 1 | 1 | 2 |
| 2 | 2 | 1 |
style
| id | title |
---------------------
| 1 | Sculpture |
| 2 | Painting |
art_style
| id | art_id | style_id |
--------------------------
| 1 | 1 | 1 |
| 2 | 2 | 2 |
一位艺术家hasMany
艺术作品,一件艺术作品hasMany
样式,以及hasMany
位艺术家。我已经验证了这些关系是否正常工作。我还有一个简单的表单,它返回带有变量GET
和artist
的{{1}}请求的ID。
所以,我想在我的函数中做两件事:首先,检查请求中的变量是否已设置(我已经可以这样做了)。然后, 使用ELOQUENT 根据表单的结果查询style
模型。
以下是一个例子:用户搜索米开朗基罗的雕塑。该函数在艺术数据库中查询michelangelo作为雕塑的任何作品,并将其作为art
模型返回。
麻烦的是,我完全不知道如何根据相关模型的id查询数据库。有什么想法吗?
答案 0 :(得分:2)
我终于想出了如何进行查询。首先,我必须告诉Eloquent我想要检索artist
模型以及art
, THEN 我可以使用whereHas
:
$art = Art::with('artists')->whereHas('artists',function( $query ){
$query->where('artists.id',1);
})->get();