2017-09-04 46 views
0

我可以使用函數,其中()或其他等效模型已被檢索到? 例如:Laravel - 函數where()已經檢索到模型後

$head = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0) 
         ->whereHas('item', function ($q) { 
          $q->where('type_id', 1); 
         })->where('wear', 1)->first(); 

    $torso = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) { 
     $q->where('type_id', 2); 
    })->where('wear', 1)->first(); 

    if ($torso == null) 
     $torso = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) { 
      $q->where('type_id', 3); 
     })->where('wear', 1)->first(); 

    $hands = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) { 
     $q->where('type_id', 4); 
    })->where('wear', 1)->first(); 

    $waist = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) { 
     $q->where('type_id', 5); 
    })->where('wear', 1)->first(); 

    $feet = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) { 
     $q->where('type_id', 6); 
    })->where('wear', 1)->first(); 

    $amulet = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) { 
     $q->where('type_id', 8); 
    })->where('wear', 1)->first(); 

    $first_ring = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) { 
     $q->where('type_id', 9); 
    })->where('wear', 1)->first(); 

    $secound_ring = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) { 
     $q->where('type_id', 9); 
    })->where('wear', 2)->first(); 

    $right_hand = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) { 
     $q->whereIn('type_id', [10, 11]); 
    })->where('wear', 1)->first(); 

能否這些查詢合併成一個?因爲每頁數據庫都有很多查詢。

對不起,我的英語。

回答

1

請結合您的where子句中的一個函數這樣

$torso = Equipment::where([['user_id', $fighter->id], ['wear', 1]])->first(); 

它是乾淨多了。

是的,只要返回集合,就可以在運行查詢後使用where函數。

如 你可以做

Equipment::all(); 

然後where條款適用於它返回集合。 像這樣的查詢返回eloquent collection。 轉到此文檔頁面https://laravel.com/docs/5.5/eloquent-collections查看可用於雄辯集合的所有功能。

但是使用where子句以first()結尾的查詢返回值是不可能的,因爲它不返回集合。

相關問題