Php 多表关系

Php 多表关系,php,mysql,laravel,laravel-4,eloquent,Php,Mysql,Laravel,Laravel 4,Eloquent,我有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表中只有子trim的Makes列表 我在forsale表中有20条记录,我想得到这些汽车的品牌列表 我

我有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表中只有子trim的Makes列表

我在forsale表中有20条记录,我想得到这些汽车的品牌列表


我使用的是Laravel,因此,如果有人以前使用过eloquent,那么这将非常好

您可以使用此查询来回答您提出的第一个问题。不确定这是否完全回答了你的问题


选择*FROM Makes m left join Foresale\u Cars fc on(m.id=fc.id)left join Trims t on(fc.trim\u id=t.id),其中t.trim\u 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 }}
                ...
    }
}
编辑:当然,您可以使用原始查询,但使用模型和雄辩的力量更优雅、更有用

有关此主题的更多信息:

雄辩的方式:

// Makes that have forsale nested relation
Make::whereHas('models', function ($q) {
    $q->whereHas('trims', function ($q) {
        $q->has('forsales');
    });
})->get(); // returns Eloquent Collection
具有正确关系的模型(hasMany可以替换为hasOne,如果这是某个地方的实际关系):


Makes
for sale table
@samitha之间的关系是什么,我正在将forsale条目与trim IDI关联如果它没有关联如何从makes k中查询选择k.make_name连接l上的模型l.make_id=k.id连接t上的trims t.model_id=l.id连接s上的forsale_汽车s.trim_id=t.id其中…感谢您的尝试,但缺少模型表,我试图在您的查询中实现它,但没有成功。这不是循环mysql查询吗?
// 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');
}