web-dev-qa-db-fra.com

Erreur générale: 1364 Le champ 'user_id' n'a pas de valeur par défaut

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

aucune idée pourquoi cet échec?  enter image description here

11
Mohammed Sabbah

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()
]);
14
Mohammed Sabbah

Ouvrez database.php et find 'strict' changez la valeur true en false et essayez à nouveau

5
Shailesh Ladumor

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

4
Mayur Budukale

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. 

1
Gammer

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

1
Sapnesh Naik

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.

1
Lamin Barrow

utiliser print_r(Auth);

puis voyez dans quel format vous avez user_id/id variable et utilisez-le

1

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.

0
Ilia Rostovtsev

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.

0
Alejandro Díaz

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
    ]));
0
Muhammad Rizwan
 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

0