2016-03-28 161 views
2

我是Laravel的新手。我正在使用Laravel 5.2,並且在將數據插入到用於處理多對多關係的數據透視表中時遇到了問題。爲了將數據傳遞給服務器,我使用了jquery ajax post請求。它的代碼如下。在Laravel 5.2中插入數據到數據透視表中

$("#btnSave").click(function(){ 

var path = JSON.stringify(route); 
var token = $('input[name="_token"]').val(); 

$.post("/tour", 
{ 
    tourname: $("#name").val(), 
    startpoint: $("#select_startpoint").val(), 
    endpoint : $("#select_endpoint").val(), 
    waypoints : path, 
    '_token': token  
},function(){ 
    alert("Path has been saved"); 
    window.location.href = "/tour"; 
}); }); 

這裏路由是一個JavaScript數組與字符串集,我使用Json傳遞服務器中的值。在這裏,我使用RESTful資源控制器來處理請求,其存儲方法如下。

public function store(Request $request){ 
    $user = Auth::user(); 

    $tour = new Tour; 
    $tour->name = $request->tourname; 
    $tour->user_id = $user->id; 
    $tour->startpoint = $request->startpoint; 
    $tour->endpoint = $request->endpoint; 
    $tour->save(); 

    $json = $request->waypoints; 
    $waypoints = json_decode($json); 

    foreach($waypoints as $waypoint){   
     $city = City::where('name', '=', $waypoint)->firstOrFail();  
      $tour->cities()->attach($city->id);     
    } } 

在這裏,在插入數據透視表我想從數據庫中獲取特定城市的city_id第一,因爲我只有它在數組中的名字。 當我執行代碼旅遊表得到正確更新,但數據透視表(city_tour)does'nt。當我進一步調試時,我發現當一個整數值被自定義分配時(例如:$tour->cities()->attach(2);)代碼工作正常。看起來在將值分配給查詢中的$waypoint變量時出現問題。但我無法弄清楚,非常感謝幫助。

+0

如果這個工程$ this-> cities() - > attach(2);那麼你的問題可能在這裏----> $ city = City :: where('name','=',$ waypoint) - > firstOrFail(); –

+1

你可以嘗試在哪裏('名稱','LIKE','%$ waypoint%「).....」=「通常不會與字符串發揮良好,除非它完全匹配 –

+0

@HBensiali我嘗試了你的想法並失敗。但是當我在查詢中使用了一個字符串時(例如'$ city = City :: where('name','LIKE',「cityname」) - > firstOrFail();')。查詢得到執行。所以看起來變量不會在查詢中分配值。 – anuh91

回答

1

你可以嘗試在哪裏('name','LIKE',「%$ waypoint%」).....「=」通常不能很好地與字符串搭配,除非它完全匹配。

LIKE in SQL獲得最接近的匹配。 使用%和LIKE:

尋找城市'阿爾及爾'。 這將找到城市

$city = 'Algiers'; 
City::where('name', 'LIKE', "$city")->firstOrFail(); 

,如果你有一個白色的空間,然後如果你使用%,那麼空間或字符被忽略你可能會得到什麼

$city = ' Algiers'; 
City::where('name', 'LIKE', "$city")->firstOrFail(); 

$city = ' Algiers'; //extra space on the end 
City::where('name', 'LIKE', "%$city")->firstOrFail(); 

,或者如果你想從單詞的末尾忽略任何不同之處:

$city = 'Algier'; //with 's' missing 
City::where('name', 'LIKE', "$city%")->firstOrFail(); 

或者你沒有使用像,但你確保$城市在列。

希望可以幫到

相關問題