Ich möchte ein Feld (status
) auf dem Modell aktualisieren. Ich würde von DB abrufen und der Spalte status
einen neuen Wert zuweisen. Aber nachdem das Modell gespeichert wurde, sah ich ein anderes Datumsfeld (published_at
), das ebenfalls auf updated_at
geändert wurde. Die Aktion wird ausgeführt, wenn Benutzer auf einen Link als http://localhost/dashboard/gallery/publish/1 klicken.Warum aktualisiert Laravel 5 automatisch mein Datumsfeld?
Ich weiß nicht, warum die published_at
automatisch aktualisiert und das selbe wie updated_at
?
Hier ist Controller-Code:
<?php
class GalleryController extends Controller
{
/**
* Approve to publish the gallery on the web.
*
* @param int $id
* @return Response
*/
public function getPublish($id)
{
$gallery = Gallery::whereId($id)->firstOrFail();
$gallery->status = Gallery::STT_PUBLISH;
$gallery->save();
return redirect(route('backend::gallery.edit',[$gallery->id]))->with('status', 'Done');
}
}
?>
und Galerie Modell:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Gallery extends Model
{
use SoftDeletes;
protected $table = 'gallery';
protected $fillable = ['title', 'slug', 'content', 'category_id', 'type'];
protected $guarded = ['published_at','creator_id','thumbnail'];
protected $dates = ['deleted_at', 'published_at'];
}
?>
und Migration func:
public function up()
{
Schema::create('gallery', function (Blueprint $table) {
$table->increments('id')->unsigned();
$table->string('slug')->unique();
$table->tinyInteger('type')->unsigned();
$table->integer('category_id')->unsigned()->default(0);
$table->string('thumbnail');
$table->string('title');
$table->text('content');
$table->integer('status')->unsigned()->default(0);
$table->timestamp('published_at');
$table->integer('creator_id')->unsigned();
$table->timestamps();
$table->index(['slug']);
$table->softDeletes();
});
Schema::table('gallery', function (Blueprint $table) {
$table->foreign('category_id')->references('id')->on('category');
$table->foreign('creator_id')->references('id')->on('users');
});
}
UPDATE
Ich sehe das config in Migration Funktion Problem macht, hier: $table->timestamp('published_at');
Und diese Anweisung erstellt SQL wie folgt aus:
CREATE TABLE `gallery` (
...
`published_at` Timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
...
)
So, wie ein Zeitstempel-Feld einrichten , das ist nicht automatische Aktualisierung der aktuellen Zeit?
UPDATE 2
Erledigt, ändere ich die Migration, benutzen Sie einfach dateTime
statt timestamp
.
Verwenden Sie es, $table->dateTime('published_at');
, diese Anweisung wird nicht automatisch auf CURRENT_TIMESTAMP aktualisieren.
versuchen Sie dies, entfernen Sie "published_at" aus $ dates – SarangaR
@SarangaR Ich versuchte es vorher, aber es ist nicht getan – Davuz
@TimothyKruger Ich stimme über Timestamp Problem aber nicht updated_at oder deleted_at. Bitte beachten Sie mein Update der Frage. Vielen Dank! – Davuz