簡體   English   中英

MySQL與多個表的關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM