Laravel 5.2基于多对多关系找到模型


Laravel 5.2 Find a Model Based on a Many-to-Many relationship

我在为项目中的搜索函数编写一个雄辩的查询时遇到了问题。以下是我的数据库表/模型:

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,其中包含变量artiststyle

因此,我想在我的函数中做两件事:首先,检查请求中的变量是否已设置(我已经可以这样做了)。然后,使用ELOQUENT根据表单的结果查询art模型。

这里有一个例子:一个用户搜索米开朗基罗的雕塑。该函数查询艺术数据库中米开朗基罗雕塑的任何作品,并将其作为art模型返回。

问题是,我完全不知道如何根据相关模型的id查询数据库。有什么想法吗?

我终于弄清楚了如何进行查询。首先,我必须告诉Eloquent我想检索artist模型和art然后我可以使用whereHas:

$art = Art::with('artists')->whereHas('artists',function( $query ){
    $query->where('artists.id',1);
})->get();