Laravel 5:SQLSTATE [23000]:完整性约束违规

时间:2015-05-06 18:03:16

标签: php mysql validation constraints laravel-5

我有一个包含以下字段的表单:名称,全名,描述,电子邮件,密码,州,城市(在选择状态时通过Ajax填充)和照片(图片上传)。 这是我的架构:

public function up()
{
    Schema::create('states', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('acronym');
        $table->string('name');
    });

    Schema::create('cities', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('name');
        $table->integer('state_id')->unsigned();
        $table->foreign('state_id')->references('id')->on('states');
    });

    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('name');
        $table->string('fullname');
        $table->string('photo');
        $table->text('description');
        $table->string('email');
        $table->string('password', 60);
        $table->integer('city_id')->unsigned();
        $table->foreign('city_id')->references('id')->on('cities');
        $table->rememberToken();
    });
}

我的问题是,当我按下提交按钮时,会出现以下错误消息:

SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(yearbookusers,CONSTRAINT users_city_id_foreign FOREIGN KEY({{ 1}})参考city_idcities))(SQL:插入idusersnamedescription)值(Gabriel ,Description,email @ gmail.com))

所以问题与city_id是外键有关(表单中选项的'值'属性是id)。例如:

email

但是当我尝试通过phpmyadmin插入时,它插入时没有错误。

那可能是什么问题?

这是我在控制器上的保存方法:

<option value="281">Abaíra</option>

编辑:在saveRegister()方法修复city_id。

2 个答案:

答案 0 :(得分:3)

而不是

$user = new User(array(
        'name' => \Input::get('name'),
        'description' => \Input::get('description'),
        'fullname' => \Input::get('fullname'),
        'email' => \Input::get('email'),
        'city' => \Input::get('city'),
    ));

这样做

$user = new User();
$user->fill(array(
        'name' => \Input::get('name'),
        'description' => \Input::get('description'),
        'email' => \Input::get('email')
    ));
$user->fullname = \Input::get('fullname');
$user->city= \Input::get('city');

或更改模型中的$fillable属性

答案 1 :(得分:1)

可能是因为您的cities.id字段未签名而您的FK字段未签名。关系中使用的所有列必须完全匹配。

尝试将代码更改为:

Schema::create('cities', function(Blueprint $table)
{
    $table->increments('id')->unsigned();