【发布时间】:2015-12-23 22:43:30
【问题描述】:
使用 Laravel Eloquent 和 hasOne()\hasMany() 关系,是否可以限制“父”表仅在存在“子\外部”关系时才检索结果?
FOOS
+----+------------+
| id | etc |
+----+------------+
| 1 | one |
| 2 | two |
| 3 | three |
| 4 | four |
+----+------------+
酒吧
+----+-----+--------+
| id | val | foo_id |
+----+-----+--------+
| 11 | 101 | 1 |
| 12 | 102 | 2 |
| 13 | 203 | 3 |
| 14 | 204 | 4 |
+----+-----+--------+
在 Foo 类(模型)中
public function highBars(){
return $this->hasOne('App\Bar')->where('val','>','200');
}
在控制器中
Foo::with('highBars')->get();
返回所有 FOOS,即使某些 high_bars 关系为空。
是否可以只包含关系值不为空的 FOOS 结果? (foos.id = 3,4)
这是检索到...
0 => array:3 [▼
"id" => 1
"etc" => "one"
"high_bars" => null
]
1 => array:3 [▼
"id" => 2
"etc" => "two"
"high_bars" => null
]
2 => array:3 [▼
"id" => 3
"etc" => "three"
"high_bars" => array:2 [▼
"id" => 13
"val" =>203
"foo_id" =>3
]
]
3 => array:3 [▼
"id" => 4
"etc" => "four"
"high_bars" => array:2 [▼
"id" => 14
"val" =>204
"foo_id" =>4
]
]
但这就是我想要的..
0 => array:3 [▼
"id" => 3
"etc" => "three"
"high_bars" => array:2 [▼
"id" => 13
"val" =>203
"foo_id" =>3
]
]
1 => array:3 [▼
"id" => 4
"etc" => "four"
"high_bars" => array:2 [▼
"id" => 14
"val" =>204
"foo_id" =>4
]
]
【问题讨论】:
-
其他答案回答了问题(您正在寻找
has(),但我想指出的是,由于Foo包含bar_id外键,所以关系是@987654331 @ 属于Bar,而Bar有一个(或多个)Foo。 -
你说得对@patricus,当我写这篇文章时我很困,今天早上应用它时意识到,有些地方不正确..