我在为项目中的搜索函数编写一个雄辩的查询时遇到了问题。以下是我的数据库表/模型:
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
请求的形式返回id,其中包含变量artist
和style
。
因此,我想在我的函数中做两件事:首先,检查请求中的变量是否已设置(我已经可以这样做了)。然后,使用ELOQUENT根据表单的结果查询art
模型。
这里有一个例子:一个用户搜索米开朗基罗的雕塑。该函数查询艺术数据库中米开朗基罗雕塑的任何作品,并将其作为art
模型返回。
问题是,我完全不知道如何根据相关模型的id查询数据库。有什么想法吗?
我终于弄清楚了如何进行查询。首先,我必须告诉Eloquent我想检索artist
模型和art
,然后我可以使用whereHas
:
$art = Art::with('artists')->whereHas('artists',function( $query ){
$query->where('artists.id',1);
})->get();