这是我写在路由文件中的代码
`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进行响应。
答案:最简单的解决方案是返回一个数组数据,其中第一个值是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在查询中使用用户或品牌模型。