associate()和1tomany奇怪的行为

时间:2016-10-11 12:11:00

标签: laravel laravel-5 orm one-to-many laravel-5.3

我使用Laravel 5.3和ive一个带有“store”方法的简单控制器,这是关系的“belongsTo”方面。 其他2个模型正确包含“hasMany”功能。

public function store(Request $request)
{

    $user_id = JWTAuth::parseToken()->authenticate()->id;
    if(!Vehicle::where('id', '=', $request->vehicle_id)->exists()){
        return $this->response->error('could_not_create_trip_errore_veicolo', 500);
    }
    if(!Ztl::where('id', '=', $request->ztl_id)->exists()){
        return $this->response->error('could_not_create_trip_errore_ztl', 500);
    }
    $request->request->add(['user_id' => $user_id]);

    $trip = new Trip($request->all());

    //$trip->user()->associate($request->user_id);
    //$trip->vehicle()->associate($request->vehicle_id);
    //$trip->ztl()->associate($request->ztl_id);

    if(true)
    {
        if($trip->save()){

            return $this->response->created();
        }else return $this->response->error('could_not_create_trip', 500);
    }else return $this->response->error('could_not_create_trip_current_user_Error', 500);

}

第一个问题是:  为什么如果评论或取消注释“关联”方法,没有任何改变。 我是否需要将这些放在控制器上,或者我不知道这种方法的含义是什么。

第二:

如果我向控制器发送一些数据,使用表格进行测试,“需要”的是3个外键。 如果我发送的数字不在我的其他“hasmany”表中,则会出现错误,但如果尝试插入类似"2dsksk"的内容,其中2是“many”表的正确ID,然后是随机字符串,插入ID为2,这是正确的吗?  验证只需要数据的“正确”数字部分......问题是,为什么?这是安全的吗?

1 个答案:

答案 0 :(得分:1)

associate只设置孩子的外键。这意味着您之后需要保存模型。

 $trip->user()->associate($request->user_id);
 $trip->save();

对于第二个问题,可能是MySQL根据列的数据类型截断数据。如果您不希望这种情况发生,您可能需要将MySQL设置为严格模式。

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict