雄辩 - 关系表上的位置

时间:2016-06-10 12:30:11

标签: laravel laravel-5 eloquent

我有模型存储和控制:

class Store extends Model{
    protected $fillable = ['code', 'name', 'country_id', 'active'];

    public function controls(){
        return $this->hasMany('App\Control');
    }
}

class Control extends Model{
    protected $fillable = ['store_id', 'user_id', 'saved_at'];

    public function store(){
        return $this->belongsTo('App\Store');
    }

}

现在我想要获得5个商店,其中没有控件或控件是所有控件中最旧的(created_at)。

如何以雄辩的方式创造这个条件?我知道如何使用Joins来实现它,但我希望它能够使用"漂亮的代码"。

类似于:D

\App\Store::with('controls')->whereNotNull('controls.created_at')->orderBy('controls.created_at', 'desc')->take(5)->get();

1 个答案:

答案 0 :(得分:3)

我没有尝试过这些,但我认为两者都应该有效:

    \App\Store::whereHas('controls', function ($query) {
        $query->whereNotNull('created_at');
        $query->orderBy('created_at', 'desc');
    })->take(5)->get();

    \App\Store::with(['controls' => function ($query) {
        $query->whereNotNull('created_at');
        $query->orderBy('created_at', 'desc');
    }])->take(5)->get();

使用调试栏查看哪一个更快。

相关问题