2016-03-28 3 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

Вы можете попробовать, где ('name', 'LIKE', "% $ waypoint%") ..... "=" обычно не играет хорошо со строками, если не соответствует точному –

+0

@HBensiali Я попытался с вашей идеей и не смог , Но когда я использовал только строку в запросе (например, '$ city = City :: where ('name', 'LIKE'," cityname ") -> firstOrFail();'). запрос был выполнен. Таким образом, кажется, что переменные не присваивают значения в запросе. – anuh91

ответ

1

Вы можете попробовать, где ('name', 'LIKE', "% $ waypoint%") ..... "=" обычно не играет хорошо со строками, если только не имеет точного соответствия.

LIKE в SQL получает самое близкое совпадение. Использование% с НЕЙТРОМ:

поиск по городу 'Алжир'. это было бы найти город

$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(); 

или вы не должны использовать LIKE, но вы убедитесь, что $ город в колонке.

Надеюсь, что поможет

Смежные вопросы