Общая ошибка: 1364 Поле 'user_id' не имеет значения по умолчанию
Я пытаюсь назначить user_id текущему пользователю, но он дал мне эту ошибку
SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a
default value (SQL: insert into 'posts' ('updated_at', 'created_at')
values (2017-04-27 10:29:59, 2017-04-27 10:29:59))
вот мой метод
//PostController
Post::create(request([
'body' => request('body'),
'title' => request('title'),
'user_id' => auth()->id()
]));
с этими заполняемыми материалами
//Post Model
protected $fillable = ['title', 'body', 'user_id']
Однако этот метод выполняет работу
//PostController
auth()->user()->publish(new Post(request(['title' ,'body'])));
//Post Model
public function publish(Post $post)
{
$this->posts()->save($post);
}
любая идея, почему это не удается? ![enter image description here]()
Ответы
Ответ 1
Итак, после повторного просмотра кода я обнаружил ошибку.
Мне интересно, как никто не заметил этого!
В приведенном выше коде я написал
Post::create(request([ // <= the error is Here!!!
'body' => request('body'),
'title' => request('title'),
'user_id' => auth()->id()
]));
на самом деле не нужно, чтобы функция запроса деформировала тело функции create.
// this is right
Post::create([
'body' => request('body'),
'title' => request('title'),
'user_id' => auth()->id()
]);
Ответ 2
вам нужно изменить строгий режим базы данных. для отключения следуйте ниже шагу
Откройте config/database.php
найдите 'strict'
, измените значение true на false и попробуйте снова
Ответ 3
Вот как я это сделал:
Это мой почтовый сервер
Post::create([
'title' => request('title'),
'body' => request('body'),
'user_id' => auth()->id()
]);
И это моя модель публикации.
protected $fillable = ['title', 'body','user_id'];
И попробуйте обновить миграцию, если ее только на тестовом экземпляре
$ php artisan migrate:refresh
Примечание: migrate: refresh удалит все предыдущие сообщения, пользователи
Ответ 4
Пытаться
'user_id' => auth()->id
или же
'user_id' => Auth::user()->id
вместо
'user_id' => auth()->id()
Ответ 5
Для этого есть два решения.
Во-первых, это создание полей со значениями по умолчанию, установленными в datatable. Это может быть пустая строка, что отлично подходит для сервера MySQL, работающего в строгом режиме.
Во-вторых, если вы начали получать эту ошибку совсем недавно, после обновления MySQL/MariaDB, как и я, и если у вас уже есть большой проект с большим количеством исправлений, все, что вам нужно сделать, это изменить конфигурационный файл MySQL/MariaDB ( например, /etc/my.cnf
) и отключить строгий режим для таблиц:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
Эта ошибка начала происходить совсем недавно, из-за того, что по умолчанию установлен новый строгий режим. Удаление STRICT_TRANS_TABLES
из sql_mode
конфигурации sql_mode
делает его работу по-прежнему.
Ответ 6
У меня была аналогичная проблема с регистрацией пользователей сегодня, и я получал
SQLSTATE[HY000]: General error: 1364 Field 'password' doesn't have a default value (SQL: insert into 'users'
Я исправил это, добавив password
в мой защищенный массив $ fillable, и он работал
protected $fillable = [ 'name', 'email', 'password', ];
Надеюсь, это поможет.
Ответ 7
Попробуйте сделать Auth::id()
, например
Post::create([ 'body' => request('body'), 'title' => request('title'), 'user_id' => Auth::id()]);
также не забудьте включить Auth-фасад в верхней части вашего контроллера, который является App\Http\Controllers\Auth
Ответ 8
use print_r(Auth);
затем посмотрите, в каком формате вы используете переменную user_id/id и используете ее
Ответ 9
User Auth::user()->id
вместо этого.
Вот правильный способ:
//PostController
Post::create(request([
'body' => request('body'),
'title' => request('title'),
'user_id' => Auth::user()->id
]));
Если ваш пользователь аутентифицирован, тогда Auth::user()->id
сделает трюк.
Ответ 10
Это кажется недостатком в структуре вашей базы данных. Не сохраняйте значение по умолчанию None в заголовке и столбце тела.
Попробуй это:
$user_login_id = auth()->id();
Post::create(request([
'body' => request('body'),
'title' => request('title'),
'user_id' => $user_login_id
]));
Ответ 11
В моем случае ошибка состояла в том, что я не объявил поле в моем $ fillable массиве в модели. Ну, это похоже на что-то основное, но для нас, кто начал с laravel, он мог работать.
Ответ 12
Post::create([
'title' => request('title'),
'body' => request('body'),
'user_id' => auth()->id()
]);'enter code here'
вам не нужен запрос(), поскольку вы делаете это, уже вытягивая значение тела и названия
Ответ 13
Используйте столбец базы данных nullble() в Laravel. Вы можете выбрать значение по умолчанию или обнуляемое значение в базе данных.
Ответ 14
Вышеуказанная ошибка может быть результатом неправильных имен входных переменных в форме просмотра, которая прибегает к поиску значения по умолчанию, так как переменная не указана hence-- SQLSTATE [HY000]: Общая ошибка: 1364 Поле 'user_id' не имеет
значение по умолчанию (SQL: вставить в posts
(updated_at
, created_at
)
значения (2017-04-27 10:29:59, 2017-04-27 10:29:59))
Ответ 15
$table->date('user_id')->nullable();
В вашем файле create_file
должна быть включена нулевая опция.
Ответ 16
Удалите метод request(). И это похоже.
Post::create([
'body' => request('body'),
'title' => request('title'),
'user_id' => auth()->id()
]);