是什么阻止我添加一个具有外键值的行?

时间:2015-03-18 13:10:20

标签: php mysql laravel laravel-4

1452 Cannot add or update a child row: a foreign key constraint fails (`bpr`.`trips`, CONSTRAINT `trips_driver_user_id_foreign` FOREIGN KEY (`driver_user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE)

是错误。

通过MySQL手动添加行可以正常工作。如果我通过我的申请 - nope。

我想要插入的id是正确的(它存在并且是一个整数)。我检查了外键和东西,一切看起来都很好。我不知道问题可能是什么......

一些代码:

 $input = Input::all();

 Trip::create([
                'route_from'       => $input['route_from'],
                'route_to'         => $input['route_to'],
                ... adding other stuff ...
                'driver_user_id'   => Auth::user()->id
            ]);

当我var_dump(Auth::user()->id)时,我确实得到了正确的int号码,这是特定用户的正确对应ID。

在Trip模型中:

protected $hidden = [
    'id'
];
protected $fillable = [
    'route_from',
    'route_to',
    ... 
    'driver_user_id'
];
public function Trip()
{
    return $this->belongsTo('User', 'driver_user_id', 'id');
}
用户模型中的

public function Trips()
{
    return $this->hasMany('Trip');
}

1 个答案:

答案 0 :(得分:1)

我有直觉感觉属性受到保护。您的代码似乎是正确的,但是您收到的错误来自数据库。你可以这样试试看它是否有效:

$trip = new Trip;
$trip->unguard();
$trip->fill([
            'route_from'       => $input['route_from'],
            'route_to'         => $input['route_to'],
            ... adding other stuff ...
            'driver_user_id'   => Auth::user()->id
        ]);
$trip->save();

在模型上使用create方法,很难调试正在发生的事情。