2016-06-09 6 views
0

In der Datenbank Ich habe eine Tabelle 'Artikel' mit Spalten: 'title', 'body', 'published_at', 'image_name' (und es gibt auch Laravel des 'created_at' und 'updated_at' Spalten).Eine Spalte aktualisiert, aber die Spalte "published_at" wurde ebenfalls aktualisiert? [Laravel 5]

Hier ist meine Migration Artikel Tabelle für die Erstellung von:

public function up() 
{ 
    Schema::create('articles', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('user_id')->unsigned(); 
     $table->string('title'); 
     $table->string('body'); 
     $table->timestamp('published_at'); 
     $table->string('image_name')->nullable; 
     $table->timestamps(); 
     $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 
    }); 
} 

und meine Article.php sieht wie folgt aus:

class Article extends Model 
{ 
    protected $fillable = ['title', 'body', 'published_at', 'image_name']; 
    protected $dates = ['published_at']; 

    public function setPublishedAtAttribute($value) 
    { 
     $this->attributes['published_at'] = Carbon::parse($value); 
    } 

    public function getPublishedAtAttribute($value) 
    { 
     return new Carbon($value); 
    } 
... 

Ich wollte 'image_name' aktualisieren Spalte für jeden Aufzeichnung in der Datenbank (in der Artikel Tabelle) mit Ausnahme der mit ID = 18. Also, in Tinker Ich habe folgende:

DB::table('articles')->whereNotIn('id', [18])->update(['image_name' => 'pic1.jpg']); 

und jetzt 'image_name' ist 'pic1.jpg' überall, außer der Reihe, wo id = 18.

Aber das Problem ist, dass dies auch aktualisiert ‚published_at‘ Spalte, so datiert jetzt & Zeit für jeden Datensatz in der Datenbank sind die gleiche (außer wenn id = 18).

Warum ist das passiert? Ich habe & Mutatoren definiert, aber wenn ich gut verstehe - sie sollten nichts tun, weil dieser Befehl explizit war und es ist ausschließlich mit der Aktualisierung 'image_name' Spalte verbunden?

+0

müssen keine Accessoren für das Feld definiert werden, wenn Sie es in '$ dates' Eigenschaft eines' Model' [Beweises] überprüfen (https://laravel.com/docs/5.2/eloquent-mutators#date-mutators), Laravel hat dieses Feld automatisch umgewandelt. – huuuk

Antwort

2

Hey ist es nicht Laravels Problem.

Möglicherweise sind Sie in Ihrer Datenbank haben Sie Zeitstempel, so wird es automatisch Datum ändern.

Ändern Sie einfach

$table->timestamp('published_at'); 

zu

$table->dateTime('published_at'); 

und dann Migration aktualisieren.

Verwandte Themen