[英]Laravel eloquent - Filtering subquery inside with statement
我有以下查詢:
$countries = Country::where('code', '=', $code)
->with(array('cities.details' => function ($query) use ($user) {
$query->where('cities.name', '=', 'This is a city name');
}))->first();
讓我們來看一個例子:我有三個表, Country , City和CityDetails 。 我想獲得所有國家/地區,然后得到所有城市(包括詳細信息),但我也想按名稱過濾城市並獲取屬於城市表的詳細信息表 。
如果我想使用with來使用with(cities.details)
來獲取子級和另一個表,如何使用CITIES屬性進行過濾?
主要問題是:如何在with語句(如secondTable.OtherTable
獲取兩個表,並使用secondTable
屬性過濾查詢?
為了更清楚一點,如果我使用如下語句:
$countries = Country::where('code', '=', $code)
->with(array('cities.details' => function ($query) use ($user) {
$query->where('name', '=', 'This is a detail name');
}))->first();
我只能訪問詳細信息表屬性。 問題是:如何使用語句訪問城市表屬性以進行過濾?
提前致謝
我剛剛找到了解決方案。 基本上,我應該為城市表應用過濾器,然后在子查詢上調用wit函數。 這段代碼解決了我的問題:
$countries = Country::where('code', '=', $code)
->with(array('cities' => function ($query) use ($user) {
$query->where('name', '=', 'San Francisco')->with('details');
}))->first();
請注意,僅在子查詢中過濾后,我才在城市調用with('details') 。
最簡單的一種是使用聯接查詢:
(new Country)
->join('cities', 'cities.id', '=', 'countries.city_id')
->join('city_details', 'cities.id', '=', 'city_details.city_id')
->where('cities.name', 'TheName')
->where('city_details.info', 'info')
->select('...');
但是結果只有一個層次。 所以,
$query = (new Models\Country())
->with([
'cities' => function ($query) {
$query->where('name', 'xxx')->with([
'details' => function ($query) {
$query->where('info', 'info');
}
]);
}
]);
$result = $query->get()->filter(function ($item) {
return count($item['cities']);
});
結果給出了空城市的國家。 因此,最后使用Laravel集合進行過濾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.