簡體   English   中英

雄辯的Laravel多對多選擇

[英]Laravel many to many selecting with Eloquent

我有2個表,用戶和技能,並且它們之間存在多對多關系。 數據透視表skill_user也具有“級別”列-該用戶知道該技能的級別。

在用戶模型中,我有:

public function skills(){
    return $this->belongsToMany('Skill')->withPivot('level');
}

在技​​能模型中:

public function users(){
    return $this->belongsToMany('User');
}

現在,我需要運行一個查詢,該查詢將返回如下內容:

“選擇所有具有Skill_id_1> 40 && skill_id_2> 55 && skill_id_3> 67的用戶”

這里的skill_id是不同的技能,並且每個返回的用戶都應在要求的級別上擁有每個給定的技能。

我在Laravel文檔和stackoverflow中進行了盡可能多的搜索,但找不到解決方案。 任何幫助將不勝感激,謝謝!

您需要的是whereHas 他們的倍數。

$users = User::whereHas('skills', function($q){
    $q->where('skill_id', 1);
    $q->where('level', '>', 44);
})->whereHas('skills', function($q){
    $q->where('skill_id', 2);
    $q->where('level', '>', 55);
})->whereHas('skills', function($q){
    $q->where('skill_id', 3);
    $q->where('level', '>', 67);
})->get();

我假設值是動態的,所以這應該簡化很多:

$requirements = array('1' => 40, '2' => 55, '3' => 67);

$users = User::query();
foreach($requirements as $id => $value){
    $users->whereHas('skills', function($q) use ($id, $value){
        $q->where('skill_id', $id);
        $q->where('level', '>', $value);
    });
}
$users = $users->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM