0

更新:问题解决了!

我正在更新我的 Laravel 技能(使用版本 7.13.0),按照 freecodecamp.org 教程,在这里:https ://www.youtube.com/watch?v=ImtZ5yENzgE&t= 11889s(1:21:49 到 1: 22:50)。当我完成使用php artisan tinker手动添加配置文件的任务时,就像我在前端所做的那样,它无法保存。数据库是sqlite。

这是完整的错误:

用消息'SQLSTATE [23000]照亮/数据库/查询异常:完整性约束违规:19 NOT NULL约束失败:profiles.url(SQL:插入“profiles”(“title”,“description”,“user_id”,“updated_at” , "created_at") 值 (Cool Title, Description, 1, 2020-05-29 18:41:02, 2020-05-29 18:41:02))'

我在 database\migrations 文件夹中的profiles_table.php中的函数似乎没问题。它是这个:

public function up()
    {
        Schema::create('profiles', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->string('title')->nullable();
            $table->text('description')->nullable();
            $table->string('url')->nullable();
            $table->timestamps();

            $table->index('user_id');

        });
    }

Profile.php 模型函数为:

public function user()
{
    return $this->belongsTo(User::class);
}

User.php 模型函数为:

public function profile()
{
    return $this->hasOne(Profile::class);
}

于是,在终端中,输入php artisan tinker后,我在保存失败前填写了以下内容:

>>> $profile = new \App\Profile();
=> App\Profile {#3056}
>>> $profile->title = 'Cool Title';
=> "Cool Title"
>>> $profile->description = 'Description';
=> "Description"
>>> $profile->user_id = 1;
=> 1
>>> $profile->save();

编辑:这是控制器文件ProfilesController.php,如果它有助于解决问题:

<?php

namespace App\Http\Controllers;

use \App\User;
use Illuminate\Http\Request;

class ProfilesController extends Controller
{
    public function index($user)
    {
        $user = User::find($user);

        return view('home', [
            'user' => $user,
        ]);
    }
}

所有部件都正常,在我输入 SAVE 后 - 它显示了上面的错误。因此,我无法继续显示手动制作的新配置文件。

我搜索了谷歌并在这里寻找答案,就像在这个问题那个问题中一样。它没有解决我的问题,而且我认为其他问题不那么相关。

我应该怎么做才能修复它?

解决方案

坦克到@mrhn,添加一个新的空表+composer require doctrine/dbal按照这里的建议安装:https ://stackoverflow.com/a/37533819/12952748 。

4

1 回答 1

3

问题是您的数据库不允许该列为url空。您的代码很好,没有任何问题,您似乎已经运行了迁移并在之后更改了列定义。

在 Laravel 中,迁移只运行一次,并确保数据库在系统之间具有相同的结构。为了使该字段可以为空,请进行新的迁移。

php artisan make:migration url_nullable

对于新的迁移文件,添加以下迁移。这只是告诉迁移更新url为 astringnullable.

Schema::table('profiles', function (Blueprint $table) {
    $table->string('url')->nullable()->change();
});

之后运行您的迁移,您的数据库应该是最新的。

php artisan migrate
于 2020-05-29T22:47:27.917 回答