将数据插入Laravel 5.2中的数据透视表

时间:2016-03-28 08:59:57

标签: php mysql pivot-table laravel-5.2

我是Laravel的新手。我正在使用Laravel 5.2,我遇到了将数据插入到数据透视表中的问题,我曾经处理多对多的关系。为了将数据传递到服务器,我正在使用jquery ajax post请求。它的代码如下。

$("#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)没有。当我进一步调试时,我注意到自定义分配的整数值(例如:$tour->cities()->attach(2);),代码工作正常。将值分配给查询中的$waypoint变量似乎存在问题。但我无法弄明白,帮助非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试在哪里('name','LIKE',“%$ waypoint%”).....“=”通常不能很好地使用字符串,除非它完全匹配。

SQL中的LIKE获得最接近的匹配。 使用%with 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();

或者你不必使用LIKE,但你要确保$ city在列中。

希望有所帮助