Laravel 7 Сообщение об ошибке: 'SQLSTATE [23000]: нарушение ограничения целостности: 19 Ошибка ограничения NOT NULL: profiles.url - PullRequest
0 голосов
/ 29 мая 2020

ОБНОВЛЕНИЕ: ПРОБЛЕМА РЕШЕНА!

Я обновляю свои 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.

ЭТО ПОЛНАЯ ОШИБКА:

Illuminate / Database / QueryException с сообщением «SQLSTATE [23000]: нарушение ограничения целостности: 19 Ошибка ограничения NOT NULL: профили .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)) '

Моя функция в profiles_table. php в папке database \ migrations вроде нормально. Это:

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');

        });
    }

Профиль . php модель функция:

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

И Пользователь. 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,
        ]);
    }
}

Все части прошли нормально, и после того, как я набрал СОХРАНИТЬ - это показало ошибку выше. Поэтому я не могу продолжать показывать новый профиль, созданный вручную.

Я искал в Google и искал здесь ответы, например, в этот вопрос и тот вопрос . Это не решило мою проблему, и другие, как мне кажется, не столь актуальны.

Что мне делать, чтобы исправить это?

Решение

Отправьте сообщение @mrhn , добавление новой нулевой таблицы + установка composer require doctrine/dbal, как предлагается здесь: { ссылка }.

1 Ответ

2 голосов
/ 30 мая 2020

Проблема в том, что ваша база данных не позволяет столбцу url быть пустым. Ваш код в порядке и в нем нет ничего плохого, похоже, вы, возможно, выполнили миграцию и изменили определение столбцов после.

В Laravel миграции выполняются только один раз и обеспечивают одинаковую структуру базы данных во всех системах. Чтобы получить поле, допускающее значение NULL, выполните новую миграцию.

php artisan make:migration url_nullable

Для нового файла миграции добавьте следующую миграцию. Это просто сообщает, что миграция для обновления url будет string и nullable.

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

После этого запустите миграцию, и ваша база данных должна быть обновлена.

php artisan migrate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...