如何选择模型,其中所有的关系有一个特定的属性设置为一个特定的值与Laravel


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

通常情况下,我处理的查询我有两个模型,我只需要选择一个模型与whereHas查询,这是一个贪婪的条件,因为它选择尽可能多的匹配。

这是我的两个模型:

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。

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

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

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