dongqiancui9194 2017-04-18 02:32
浏览 19
已采纳

动态参数laravel

Hello I am trying to build a dynamic where parameters that are from an object. Basically I am using my $key as the column name and its $value as the value for the column. I think the keys are accurate to the column because I have set it myself before passing it in php. Here is my php code.

//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']);

What I am trying to do here is do multiple ->where clauses so that I can iterate through the object. But I am not sure about the syntax of my code.

Here is similar behavior in javascript that I have made where I make use of the $key and $value separately.

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

Could you help me do a similar behavior like that in php then use it to have a dynamic ->where parameters?

EDIT

I have encountered a problem, see my screenshot.

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, can the results still be returned like what I did there?

  • 写回答

2条回答 默认 最新

  • dounai6613 2017-04-18 03:33
    关注

    It turns out I can use my array of objects directly in where as a searchmap see here.

      $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']);
    

    Reference

    Laravel - extending Eloquent where clauses depending on dynamic parameters

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用