Laravel中的Ajax请求返回一个空对象

时间:2015-05-12 03:08:46

标签: php jquery mysql ajax laravel

我使用Laravel & jQueryinsert数据发送到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;

    }

我知道我可能在这里犯了一个错误。请除了你的回答,我想知道错误的原因。

提前致谢..

2 个答案:

答案 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);