![](/img/trans.png)
[英]A MySQL query addressing three tables: How many from A are not in B or C?
[英]Laravel Query Builder - Join three tables (A one to many B, B one to many C)
我有三張桌子。
國家:id,country_name
State:id,country_id,state_name
城市:id、state_id、city_name
我想獲得一個特定國家($id = 1),其中包含每個 state 中的所有城市。
我試試這段代碼。
DB::table('country as a')
->join('state as b', 'b.country_id', '=', 'a.id')
->join('city as c', 'c.state_id', '=', 'b.id')
->select('a.*', 'b.*', 'c.*')
->where('a.id', '=', $id)
->get();
並得到這樣的結果。
result: [
{id: 1, country_id: 1, country_name: ABC, state_name: aaa, state_id: 0, city_name: city a1},
{id: 2, country_id: 1, country_name: ABC, state_name: aaa, state_id: 0, city_name: city a2},
{id: 3, country_id: 1, country_name: ABC, state_name: aaa, state_id: 0, city_name: city a3},
{id: 4, country_id: 1, country_name: ABC, state_name: aaa, state_id: 0, city_name: city a4},
{id: 5, country_id: 1, country_name: ABC, state_name: bbb, state_id: 1, city_name: city b1},
{id: 6, country_id: 1, country_name: ABC, state_name: bbb, state_id: 1, city_name: city b2},
{id: 7, country_id: 1, country_name: ABC, state_name: bbb, state_id: 1, city_name: city b3},
{id: 8, country_id: 1, country_name: ABC, state_name: bbb, state_id: 1, city_name: city b4},
.....
]
我希望能得到這樣的結果。
result: [
{
id: 1,
country_id: 1,
country_name: ABC,
state_name: aaa,
state_id: 0,
city: [
{city_name: city a1},
{city_name: city a2},
{city_name: city a3},
{city_name: city a4}
]
},
{
id: 2,
country_id: 1,
country_name: ABC,
state_name: bbb,
state_id: 1,
city: [
{city_name: city b1},
{city_name: city b2},
{city_name: city b3},
{city_name: city b4}
]
},
.....
and like that for other states.
]
也許有人可以幫助我提供新的見解。
非常感謝。
利用 Eloquent 關系
模型與關系
class Country extends Model
{
public function states()
{
return $this->hasMany(State::class);
}
}
class State extends Model
{
public function country()
{
return $this->belongsTo(Country::class);
}
public function cities()
{
return $this->hasMany(City::class);
}
}
class City extends Model
{
public function state()
{
return $this->belongTo(State::class);
}
}
詢問
$countries = Country::query()
->with('states.cities')
->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.