Je rencontre cette erreur et aucun des résultats de Google que j'ai vérifiés ne ressemble à mon problème.
J'ai une application avec la classe Deal, User et Matches
Un accord a plusieurs correspondances . Un utilisateur a plusieurs correspondances . Un utilisateur a plusieurs offres.
J'essaie de créer un nouveau match en utilisant mon objet Deal
$deal->matches()->create(['user_id'=>$id]);
Ceci est ma classe de correspondance, j'ai défini toutes les relations nécessaires
class Match extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $guarded = [];
public $timestamps = false;
public $expired_on = "";
public static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->matched_on = $model->freshTimestamp();
});
}
public function __construct(){
$d = (new \DateTime($this->matched_on))->modify('+1 day');
$this->expired_on = $d->format('Y-m-d H:i:s');
}
/**
* Get the user that owns the match.
*/
public function user()
{
return $this->belongsTo('App\User');
}
/**
* Get the deal that owns the match.
*/
public function deal()
{
return $this->belongsTo('App\Deal');
}
}
Et je continue à avoir cette erreur lorsque je tente de créer un nouveau match.
QueryException dans Connection.php, ligne 647: SQLSTATE [HY000]: Erreur générale: 1364 Le champ 'ID_utilisateur' n'a pas de valeur par défaut (SQL: insérer dans
matches
(deal_id
) valeurs (1))
J'ai ma garde d'être un tableau vide, quel pourrait être le problème?
Supprimez le tableau guarded
et ajoutez plutôt la fillable
:
protected $fillable = ['user_id', 'deal_id'];
Si vous souhaitez revenir au comportement précédent, mettez à jour votre
config/database.php
fichier et définissez 'strict' => false
pour votre connexion.
Alexey Mezenin La réponse est correcte et bonne.
Une autre façon de l'utiliser, pour ceux qui souhaitent conserver le tableau vide gardé, est de créer un nouvel objet Match, d'y insérer les attributs et de le sauvegarder.
$match->user_id = $id;
$match->deal_id = $deal->id;
$match->matched_on = $match->freshTimestamp();
$match->save();
Comme c'était un champ unique dans mon cas, je ne pouvais pas le rendre nul.
Pour moi, j'avais un constructeur vide qui était à l'origine du problème, je ne sais pas pourquoi . S'il vous plaît, commentez si quelqu'un en connaît la raison.
public function __construct(){
}
Le commenter/le supprimer a résolu le problème.