J'essaie d'attribuer le user_id à l'utilisateur actuel mais cela me donne cette erreur
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))
voici ma méthode
//PostController
Post::create(request([
'body' => request('body'),
'title' => request('title'),
'user_id' => auth()->id()
]));
avec ces fillables
//Post Model
protected $fillable = ['title', 'body', 'user_id']
Cependant cette méthode fait le travail
//PostController
auth()->user()->publish(new Post(request(['title' ,'body'])));
//Post Model
public function publish(Post $post)
{
$this->posts()->save($post);
}
Donc, après avoir revu le code, j'ai trouvé l'erreur . Je me demande comment personne ne le remarque!
Post::create(request([ <= the error is Here!!!
'body' => request('body'),
'title' => request('title'),
'user_id' => auth()->id()
]));
en fait, il n’est pas nécessaire que la fonction de requête déforme le corps de la fonction de création.
// this is right
Post::create([
'body' => request('body'),
'title' => request('title'),
'user_id' => auth()->id()
]);
Ouvrez database.php et find 'strict'
changez la valeur true en false et essayez à nouveau
Voici comment je l'ai fait:
C'est mon PostsController
Post::create([
'title' => request('title'),
'body' => request('body'),
'user_id' => auth()->id()
]);
Et ceci est mon modèle post.
protected $fillable = ['title', 'body','user_id'];
Et essayez d'actualiser la migration si c'est juste sur une instance de test
$ php artisan migrate:refresh
Remarque: migrate: refresh supprimera tous les messages précédents, les utilisateurs
L'utilisateur Auth::user()->id
à la place.
Voici le bon chemin:
//PostController
Post::create(request([
'body' => request('body'),
'title' => request('title'),
'user_id' => Auth::user()->id
]));
Si votre utilisateur est authentifié, alors Auth::user()->id
fera l'affaire.
Essayez de faire Auth::id()
, comme
Post::create([ 'body' => request('body'), 'title' => request('title'), 'user_id' => Auth::id()]);
n'oubliez pas également d'inclure la façade Auth en haut de votre contrôleur, qui est App\Http\Controllers\Auth
J'ai eu un problème similaire avec l'enregistrement d'utilisateur aujourd'hui et je recevais un
SQLSTATE[HY000]: General error: 1364 Field 'password' doesn't have a default value (SQL: insert into `users`
Je l'ai corrigé en ajoutant password
à mon tableau protégé $ remplissable et cela a fonctionné
protected $fillable = [
'name',
'email',
'password',
];
J'espère que ça aide.
utiliser print_r(Auth);
puis voyez dans quel format vous avez user_id/id variable et utilisez-le
Il existe deux solutions à ce problème.
La première consiste à créer des champs avec des valeurs par défaut définies dans datatable. Il peut s'agir d'une chaîne vide, ce qui convient parfaitement pour un serveur MySQL fonctionnant en mode strict.
Deuxièmement, si vous avez commencé à avoir cette erreur tout récemment, après la mise à niveau de MySQL/MariaDB, comme je l’ai fait, et si vous avez déjà un grand projet avec beaucoup de choses à réparer, il vous suffit de modifier le fichier de configuration MySQL/MariaDB par exemple /etc/my.cnf
) et désactivez le mode strict pour les tables:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
Cette erreur a commencé à se produire assez récemment, en raison du nouveau mode strict activé par défaut. La suppression de STRICT_TRANS_TABLES
de la clé de configuration sql_mode
lui permet de fonctionner comme avant.
Dans mon cas, l'erreur était due au fait que je n'avais pas déclaré le champ dans mon tableau remplissable $ dans le modèle. Cela semble être quelque chose de fondamental, mais pour nous qui avons commencé avec laravel, cela pourrait fonctionner.
Cela semble être une faille dans la structure de votre base de données. Conservez la valeur par défaut Aucune dans votre colonne de titre et de corps.
Essaye ça:
$user_login_id = auth()->id();
Post::create(request([
'body' => request('body'),
'title' => request('title'),
'user_id' => $user_login_id
]));
Post::create([
'title' => request('title'),
'body' => request('body'),
'user_id' => auth()->id()
]);`enter code here`
vous n'avez pas besoin de request () car vous le faites déjà en tirant la valeur body et title