【发布时间】:2016-12-26 14:33:54
【问题描述】:
免责声明:总的来说,我是 SQL 的绝对新手。
我有 2 个具有多对多关系的表,因此我创建了一个数据透视表。
表格如下:sheets、styles和sheet_style。
- 我的
Sheet模型有一个styles()方法(BelongsToMany关系) - 我的
Style模型有一个sheets()方法(BelongsToMany关系)
我目前正在尝试编写一个请求,对于 1 个给定的 style 名称,它将检索相应的 sheets。
这是我想出的:
protected function getSheetsFromStyle($style_name) {
$style = Style::where('name', $style_name)->first();
if($style != null) {
$entries = \DB::table('sheet_style')->where('style_id', $style->id)->get();
$corresp_sheet_ids = [];
foreach($entries as $entry) {
array_push($corresp_sheet_ids, $entry->sheet_id);
}
$corresp_sheets = [];
foreach($corresp_sheet_ids as $s_id) {
array_push($corresp_sheets, Sheet::where('id', $s_id)->first());
}
return $corresp_sheets;
}
return [];
}
但是,这似乎真的“未优化”。有没有办法只在 MySQL 中实现这一点,而不必到处创建 foreach 循环?或者也许有办法使用我设置的关系?
【问题讨论】: