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

时间:2016-05-11 02:38:49

标签: php mysql eloquent laravel-5.2

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

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位艺术家。我已经验证了这些关系是否正常工作。我还有一个简单的表单,它返回带有变量GETartist的{​​{1}}请求的ID。

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

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

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

1 个答案:

答案 0 :(得分:2)

我终于想出了如何进行查询。首先,我必须告诉Eloquent我想要检索artist模型以及art THEN 我可以使用whereHas

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