如何 select 模型,其中所有关系都将特定 属性 设置为具有 Laravel 的特定值?

How to select models where all relations have a specific property set to a specific value with Laravel?

通常,我正在处理查询我有两个模型,我只需要 select 一个带有 whereHas 查询的模型,这是一个贪婪的条件,因为它 select 尽可能多的匹配。

这是我的两个模型:

class Part extends Eloquent {
    protected $table = 'parts';
    protected $primaryKey = 'part_id';

    public function partFlights() {
        return $this->hasMany('PartFlights');
    }
}

class PartFlight extends Eloquent {
    protected $table = 'part_flights_pivot';
    protected $primaryKey = 'part_flight_id';

    public function part() {
        return $this->belongsTo('Spacecraft');
    }
}

如您所见,PartPartFlight 之间存在 1:m 关系。

我想要的是 select 所有 Part 的非贪婪匹配,其中所有 PartFlight 的属性 landed 设置为 true。我怎样才能做到这一点?

而不是试图找出是否所有都是 true 我建议你检查 none 是否是 false ;)

$parts = Part::whereDoesntHave('partFlights', function($q){
    $q->where('landed', false);
})->get();