[英]MySQL relation with multiple tables
我有4個mysql表,如下所示:
Makes:
id - make_name
Models:
id - model_name - make_id
Trims:
id - trim_name - model_id
Forsale_Cars:
id - trim_id - year - price
在Makes表中,我有大約700條記錄,所以我的問題是,如何獲取Forsale表中只有一個孩子裝飾的Makes列表?
我的待售表中有20條記錄,我想獲取這些汽車的品牌列表。
我正在使用Laravel,所以如果有人實現了以前使用雄辯的語言,那將會很棒
口才:
// Makes that have forsale nested relation
Make::whereHas('models', function ($q) {
$q->whereHas('trims', function ($q) {
$q->has('forsales');
});
})->get(); // returns Eloquent Collection
具有正確關系的模型(如果在某個地方有實際關系,可以用hasOne替換hasMany):
// Make model
public function models()
{
return $this->hasMany('CarModel');
}
// CarModel (as you can't use Model name)
public function trims()
{
return $this->hasMany('Trim');
}
public function make()
{
return $this->belongsTo('Make');
}
// Trim model
public function forsales()
{
return $this->hasMany('Forsale');
}
public function carModel()
{
return $this->belongsTo('CarModel');
}
// Forsale model
public function trim()
{
return $this->belongsTo('Trim');
}
您可以將這個查詢用於您提出的第一個問題。 不知道這是否完全可以回答您的問題。
SELECT * FROM使m左聯接(Foresale_Cars fc on(m.id = fc.id)左聯接Trim t on(fc.trim_id = t.id)其中t.trim_name =“ child trim”
我假設您已經設置了所有模型,例如:
class Makes extends Eloquent {
protected $table = 'makes';
public function models() {
return $this->hasMany('Model', 'makes_id');
}
}
等等(當然,您必須對所有模型都這樣做)
現在,如果要出售所有汽車,您只需鏈接一些foreach循環:
foreach( $makes->models as $model ) {
foreach( $model->trims as $trim ) {
{{ $trim->forsale_cars }}
...
}
}
編輯:是的,您當然可以使用原始查詢,但是使用模型和雄辯的力量會更加優雅和有用...
有關此主題的更多信息: http : //laravel.com/docs/eloquent#relationships
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.