php Laravel 5:SQL状态[23000]:完整性约束冲突

tpxzln5u  于 2023-03-07  发布在  PHP
关注(0)|答案(3)|浏览(148)

我有一个包含以下字段的表单:name、fullname、description、email、password、state、city(当选择state时,通过Ajax填充)和photo(上传的图片)。

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

我的问题是,当我按下提交按钮时,出现以下错误消息:
数据库状态[23000]:完整性约束冲突:1452 0x0060无法新增或更新子列:外键约束失败(yearbook. users,约束users_city_id_foreign外键(city_id)引用citiesid))(SQL:插入到usersnamedescriptionemail)值中(加布里埃尔,说明,www.example.com))email@gmail.com))
因此,问题与city_id是一个外键有关(表单选项中的'value'属性是id)。

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

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

    • 那问题出在哪里**

下面是我在控制器上的save方法:

public function saveRegister()
{
    $rules = array(
        'name' => 'required',
        'description' => 'required',
        'fullname' => 'required',
        'email' => 'required',
        'password' => 'required',
        'state' => 'required',
        'city' => 'required',
        'photo' => 'required',
        'photo' => 'image|max:3000000',
    );
    $val = \Validator::make(\Input::all(), $rules);

    if($validar->fails()){
        return redirect('register')->withErrors($val);
    } else {
        $user = new User(array(
            'name' => \Input::get('name'),
            'description' => \Input::get('description'),
            'fullname' => \Input::get('fullname'),
            'email' => \Input::get('email'),
            'city_id' => \Input::get('city'),
        ));
        $user->timestamps = false;
        $user->save();
        return redirect('register')->with('message', 'User saved!');

    }
}

编辑:修复了saveRegister()方法中的city_id。

vtwuwzda

vtwuwzda1#

代替

$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属性

4ioopgfo

4ioopgfo2#

这可能是因为您的cities.id字段不是无符号的,而您的FK字段是无符号的。关系中使用的所有列必须完全匹配。
尝试将代码更改为:

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

iqxoj9l93#

数据库状态[23000]:完整性约束冲突:1048列"id"不能为空(连接:mysql,SQL语言:插入到pracidnameemailpassword)值(?,?,?,?)中,单击"提交"按钮时出现此错误。

相关问题