我使用Laravel & jQuery
将insert
数据发送到MySQL
表并收回新行的新ID。问题是我得到一个空对象的响应。我也试过print_r
我的控制器中的结果,但我找回了一个巨大的阵列。
这是一些代码。
jQuery:
$.ajax({
url: "locations/new",
type: "get", //send it through get method
data:{name:name,description:description},
success: function(response) {
$data = $(response);
console.log($data);
},
error: function() {
console.log("Unable add")
}
});
控制器:
$name= Input::has('name') ? Input::get('name') : null;
$description= Input::has('description') ? Input::get('description') : null;
$add = Location::add($name, $description);
return $add;
和我的模特:
public static function add($name,$description){
$location_id = DB::table('locations')->insertGetId(
array('name' => $name, 'description' => $description)
);
Self::get($location_id);
}
public static function get($location_id){
$result = DB::table('locations')->where('location_id',$location_id)
->select(DB::raw('location_id,name'));
$result->get();
return $result;
}
我知道我可能在这里犯了一个错误。请除了你的回答,我想知道错误的原因。
提前致谢..
答案 0 :(得分:3)
在共同调查(@chat)之后,问题似乎出现在“查询”构建器中。
添加var_dump($result)
后,输出为:
Error: Syntax error, unrecognized expression: object(Illuminate\Database\Query\Builder)#248 (27) { ["connection":prot
我建议删除DB::raw
函数,因为您可以将字段传递给select
函数,并且从方便的原因将 - > get()函数附加到同一行。因此,最终的查询构建器代码将是:
$result = DB::table('locations')->where('location_id',$location_id)->select('location_id','name')->get();
这解决了这个问题。
更新 - 原因
在深入了解框架的来源之后,我发现了:
/**
* Set the columns to be selected.
*
* @param array $columns
* @return $this
*/
public function select($columns = array('*'))
{
$this->columns = is_array($columns) ? $columns : func_get_args();
return $this;
}
因此select
函数期望数组或参数为columns
,并且当db::raw
正在使用时 - 它返回的字符串与{{1的预期参数冲突功能。
答案 1 :(得分:0)
这是你的控制器应该是什么样子
$location = new Location();
$location->name = Input::get('name', null);
$location->description= Input::get('description', null);
$location->save();
return response()->json(location);