ОБНОВЛЕНИЕ: ПРОБЛЕМА РЕШЕНА!
Я обновляю свои навыки 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: 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)) '
Моя функция в 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');
});
}
Функция Profile.php model:
public function user()
{
return $this->belongsTo(User::class);
}
А функция User.php model:
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
, как предлагается здесь: https://stackoverflow.com/a/37533819/12952748.