webentwicklung-frage-antwort-db.com.de

Das Feld Laravel 5.4 hat keinen Standardwert

Ich habe diesen Fehler und keines der gegoogelten Ergebnisse, die ich überprüft habe, ähnelt meinem Problem.

Ich habe eine Anwendung mit der Klasse Deal, User und Matches

Ein Deal hat viele Übereinstimmungen. Ein Benutzer hat viele Übereinstimmungen. Ein Benutzer hat viele Angebote.

Ich versuche, ein neues Match mit meinem Deal-Objekt zu erstellen

$deal->matches()->create(['user_id'=>$id]);

Dies ist meine Match-Klasse, ich habe alle benötigten Beziehungen definiert

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

Ich bekomme diese Fehlermeldung immer wieder, wenn ich versuche, ein neues Spiel zu erstellen.

QueryException in Connection.php Zeile 647: SQLSTATE [HY000]: Allgemeiner Fehler: 1364 Feld 'user_id' hat keinen Standardwert (SQL: Einfügen in matches (deal_id) Werte (1))

Ich habe ein leeres Array, was könnte das Problem sein?

13
John David

Entfernen Sie das guarded-Array und fügen Sie stattdessen die fillable hinzu:

protected $fillable = ['user_id', 'deal_id'];
31
Alexey Mezenin

Wenn Sie zum vorherigen Verhalten zurückkehren möchten, aktualisieren Sie Ihr

config/database.php

datei und setze 'strict' => false für deine Verbindung.

20
grantDEV

Alexey Mezenins Die Antwort ist richtig und gut.

Eine andere Methode, die ich verwendet habe, ist die Erstellung eines neuen Match-Objekts und das Einfügen der Attribute und das Speichern.

            $match->user_id = $id;
            $match->deal_id = $deal->id;
            $match->matched_on = $match->freshTimestamp();
            $match->save();
3
John David

Da es sich in meinem Fall um ein eindeutiges Feld handelte, konnte ich es nicht nullfähig machen.

Für mich hatte ich einen leeren Konstruktor, der das Problem verursacht hat, und ich weiß nicht warum .. Bitte kommentieren, wenn jemand den Grund kennt.

public function __construct(){

}

Durch Kommentieren/Entfernen wurde das Problem behoben.

0
vivek takrani