提问者:小点点

尝试使用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个答案

匿名用户

答案:最简单的解决方案是返回一个数组数据,其中第一个值是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;

但这让我问了一个问题,是不是每个品牌只有一张桌子?如果是这样,为什么要将这些信息与用户一起存储,而不是存储在“Brands”表中?最有意义的方法是有一个Brands模型,它有一个table_name列,您可以通过以下简单的查询获得表名:

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

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