2017-04-18 48 views
0

你好我正在試圖建立一個動態的參數是從一個對象。基本上我使用我的$key作爲列名,它的$value作爲列的值。我認爲這些按鍵對列是準確的,因爲在將它傳遞給php之前,我已經自己設置了它。這是我的PHP代碼。動態參數laravel

//model of the request Array [Object] - contains the filter list along with their key 
     $filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by') 
     ->leftJoin('roles', 'roles.id', '=', 'users.role_id') 
     ->leftJoin('types', 'types.id', '=', 'methods.type_id'); 

     foreach ($request->filters as $key => $value) { 
     $filtered_table->where($key, '=', $value); 
     }//dynamic where parameters 

     $filtered_table->get([ 'users.username', 'users.id AS users_id', 'methods.*', 'methods.id AS method_id', 'methods.name AS method_name', 'roles.id AS role_id', 'roles.name AS role_name', 
     'types.id AS type_id_typetable', 'types.name AS type_name']); 

我在這裏要做的是做多個->where子句,以便我可以遍歷該對象。但我不確定我的代碼的語法。

這裏是類似的行爲在JavaScript中,我已經使我分別使用$ key和$ value。

for (var i=0; i < filtered_table.length; i++){ 
      for (var key in filtered_table[i]){ 
       console.log(key + " -> " + filtered_table[i][key]); 
      } 
    } 

你能幫助我在PHP做這樣的一個類似的行爲,然後用它有一個動態->where參數?

編輯

我也遇到了問題,請參閱我的截圖。

enter image description here

public function filterDataCal(Request $request) { 
     //model of the request Array [Object] - contains the filter list along with their key 
     $filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by') 
     ->leftJoin('roles', 'roles.id', '=', 'users.role_id') 
     ->leftJoin('types', 'types.id', '=', 'methods.type_id') 
     ->where(function ($filtered_table) use ($request->filters) {//this is line 122 
        foreach ($request->filters as $key => $value) { 
         $filtered_table->where($key, '=', $value); 
        } 
       }) 
     ->get([ 'users.username', 'users.id AS users_id', 'methods.*', 'methods.id AS method_id', 'methods.name AS method_name', 'roles.id AS role_id', 'roles.name AS role_name', 
     'types.id AS type_id_typetable', 'types.name AS type_name']); 
     if($filtered_table) { 
     return $filtered_table;//data model when returned Array [Object, Object, .....] 
     } else { 
     return ""; 
     } 
    } 

BTW,可結果還是很喜歡我做什麼有被退回?

回答

0

原來我可以直接用我的對象數組中where作爲searchmap在這裏看到。

$filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by') 
     ->leftJoin('roles', 'roles.id', '=', 'users.role_id') 
     ->leftJoin('types', 'types.id', '=', 'methods.type_id') 
     ->where($request->filters)  
     ->get([ 'users.username', 'users.id AS users_id', 'methods.*', 'methods.id AS method_id', 'methods.name AS method_name', 'roles.id AS role_id', 'roles.name AS role_name', 
     'types.id AS type_id_typetable', 'types.name AS type_name']); 

參考

Laravel - extending Eloquent where clauses depending on dynamic parameters

0

您可以將您的查詢傳遞給foreach內的閉包。如果是這樣的

Method::leftJoin('users', 'users.id', '=', 'methods.created_by') 
     ->leftJoin('roles', 'roles.id', '=', 'users.role_id') 
     ->leftJoin('types', 'types.id', '=', 'methods.type_id') 
     ->where(function ($filtered_table) use ($request->filters) { 
      foreach ($request->filters as $key => $value) { 
        $filtered_table->where($key, '=', $value); 
      } 
     }) 
     ->get([ 'users.username', 'users.id AS users_id', 'methods.*', 'methods.id AS method_id', 'methods.name AS method_name', 'roles.id AS role_id', 'roles.name AS role_name', 'types.id AS type_id_typetable', 'types.name AS type_name']); 
+0

我也遇到了問題,請看看我的編輯。 :) – user827391012

+0

我忘記了逗號對不起,再試一次 –

+0

即使在左連接結束時沒有分號,錯誤仍然顯示。 – user827391012

1

您可以通過concat這樣做是爲了使組合的動態,其中你的基本查詢:

$filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by') 
     ->leftJoin('roles', 'roles.id', '=', 'users.role_id') 
     ->leftJoin('types', 'types.id', '=', 'methods.type_id'); 

     foreach ($request->filters as $key => $value) { 
     $filtered_table .= $filtered_table->where($key, '=', $value); 
     }//dynamic where parameters use `concat` to make the query 

     $filtered_table->get([ 'users.username', 'users.id AS users_id', 'methods.*', 'methods.id AS method_id', 'methods.name AS method_name', 'roles.id AS role_id', 'roles.name AS role_name', 
     'types.id AS type_id_typetable', 'types.name AS type_name']);