Использование Laravel Eloquent и отношения hasOne() \ hasMany(), возможно ли ограничить таблицу «родительский» только получением результатов, если «дочернее \ чужое» отношение существует?Laravel Eloquent hasMany hasOne ограничение родителей для детей с записями
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
]
]
Другие ответы ответить на вопрос (вы ищете 'имеет()', но я хотел бы отметить, что, так как 'Foo' содержит внешний ключ 'bar_id', отношение состоит в том, что' Foo' принадлежит 'Bar', тогда как' Bar' имеет один (или много) 'Foo'. – patricus
Вы правы @patricus, я был сонлив, когда писал это и реализовано, когда оно было применено этим утром, что-то не было правильно. – dangel