2015-05-12 68 views
2

我正在使用Laravel & jQuery以將insert數據轉換爲MySQL表,並收回新行的新ID。問題是我得到一個空的對象作爲響應。我也試過print_r結果在我的控制器,但我得到了一個巨大的數組。Laravel中的Ajax請求會返回一個空對象

這是一些代碼。

的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

嘗試'console.log(response);'看看發生了什麼 –

+0

我得到了(一個空字符串) – Makis

+0

只是拋出空氣,也許我錯了,但不應該'返回Self :: get $ LOCATION_ID);'? –

回答

3

聯合調查(@chat)後,這個問題似乎是在查詢生成器。

加入var_dump($result)後,輸出信號爲:

Error: Syntax error, unrecognized expression: object(Illuminate\Database\Query\Builder)#248 (27) { ["connection":prot 

我建議刪除DB::raw功能,你可以通過田間地頭到select功能,以及方便的原因在連接 - >獲得()函數相同線。所以最終的查詢生成器代碼將是:

$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正在使用中時 - 它返回一個與select函數的預期參數衝突的字符串。

+0

謝謝@Ofir,工作就像一個魅力! – Makis

+0

不客氣。 –

+0

它可能工作,但你正在重新發明輪子。請查看我的答案,看看它是否有效。這是更清潔,並完成「laravel的方式」。 –

0

這是你的控制器看起來應該像什麼

$location = new Location(); 
$location->name = Input::get('name', null); 
$location->description= Input::get('description', null); 
$location->save(); 
return response()->json(location); 
+0

它只有當我改變到這個'返回$位置;'但我怎樣才能得到插入的新行的ID? – Makis

+0

我犯了一個錯誤。 'return response() - > json($ location);'也應該運行良好,你可能會期待不同的輸出壽命。無論如何,我認爲這是更清潔,更容易理解。 Laravel很漂亮,應該使用本地方法。它可能會進一步優化,具體取決於你的模型和可填充屬性的樣子。閱讀文檔。它是你的朋友! –