Laravel 5.2:检索多对多关系中的唯一值列表

时间:2016-02-01 21:33:24

标签: php laravel eloquent

所以我有养老金类型:

class Type extends Base
{
    use RecordStatusActiveTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'pn_pension_type';

    /**
     * The actual primary key for the model.
     *
     * @var string
     */
    protected $primaryKey = 'pension_type_id';

    // Belongs To -----
    public function pensionClass() {
        return $this->belongsTo('App\Models\Control\PensionClass', 'pension_class_id');
    }

    // Belongs To Many -----
    public function qualifiers()
    {
        return $this->belongsToMany('App\Models\Pension\Qualifier', 'pn_pension_type_qualifier', 'type_id', 'qualifier_id');
    }
}

养老金资格赛:

class Qualifier extends Base
{
    use RecordStatusActiveTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'pn_pension_qualifier';

    /**
     * The attributes that should be casted to native types.
     *
     * @var array
     */
    protected $casts = [
        'rules' => 'array',
    ];

    // Belongs To Many -----
    public function types()
    {
        return $this->belongsToMany('App\Models\Pension\Type', 'pn_pension_type_qualifier', 'qualifier_id', 'type_id');
    }
}

他们与正常之间的表有多对多的关系。我想获得一套养老金类型,并在所有这些类型之间找到独特的资格。我可以通过他们的每个资格赛来结束,最终得到一份独特的资格赛名单,但我想知道他们是否是一个" Eloquent"办法。

1 个答案:

答案 0 :(得分:1)

使用whereHas可以根据关系限制结果。关于你想要的,你想要从你的资格赛中查询,如此。

Qualifiers::whereHas('pensions', function($query) use ($pensionIds) { 
    $query->whereIn('id', $pensionIds); 
})->distinct()->get();

添加->distinct()将为您提供唯一条目。