试图使用ajax从lar​​avel中的表中获取单个记录

时间:2018-09-23 15:31:45

标签: ajax laravel

这是我在路由文件中编写的代码

        `Route::get('/{username}/ajax-lead', function(){

          $brand_id = Input::get('brand_id');
          $table_data = DB::table('users')->where('brand_id',$brand_id)->get();
          $table_name = $table_data[0]->table_name;
          $table_lastRecords = DB::table($table_name)->get();     
          $columns = Schema::getColumnListing($table_name);
          $table_lastRecords = DB::table($table_name)->get();

            return Response::json($table_lastRecords);
        });`

here is my view file 


            `{{Form::open(array('url'=>'','files'=>true))}} 
            
                client list *
                                  
                    
                        
                           Select Clients 
                        
                        @foreach($brand as $userLeads){
                            brand_id }}">{{ $userLeads->name }}
                        }
                        @endforeach

                    

                

           
            {{Form::close()}}
           
                $('#brand_name').on('change',function(e){
                    // body...
                    console.log(e);

                    var brand_id = e.target.value;

                    //ajax Call
           $.get('/{username}/ajax-lead?brand_id=' + brand_id,function(data){
                        //success data
                        console.log(data);
                    });
                });
            `

我想获得table_name列值作为响应。我使用json进行响应。

1 个答案:

答案 0 :(得分:0)

答案:最简单的解决方案是返回一个数据数组,其中第一个值是table_name,第二个值是lastRecords的集合。看起来像这样:

$responseArray[0] = $table_name;
$responseArray[1] = $table_lastRecords;

return json_encode($responseArray);

然后,在您看来,您将解析Json响应,并让table_name = responseData [0]和lastRecords = responseData [1]。当然,您也可以使用非数字索引使代码更具可读性,例如responseData ['table_name'],但这些语义取决于您。

其他信息:

话虽如此,但我认为应该指出您的代码中的几个问题。您应该对口才查询更加熟悉,因为正确使用它们会大大简化您的代码。例如,这两行:

$table_data = DB::table('users')->where('brand_id',$brand_id)->get();
$table_name = $table_data[0]->table_name;

可以重写为:

$table_name = User::where('brand_id',$brand_id)->first()->table_name;

但这让我问一个问题,每个品牌只有一张桌子吗?如果是这样,您为什么要与用户一起存储此信息,而不是在“品牌”表中?最有意义的方式是拥有一个具有table_name列的Brands模型,然后使用以下简单查询即可获得表名:

$table_name = Brand::find($brand_id)->table_name;

此外,您应该避免在路由文件中进行此类工作。与路由用户无关的所有内容都应在控制器或模型中处理。然后,在控制器中,您应该通过导入App \ User和App \ Brand在查询中利用用户或品牌模型。