I want to update the ( status
) field on the model. I would extract from the DB and assign a new value to the status
column. But after saving the model, I saw another date field ( published_at
), also changing the same way as updated_at
. The action is performed when the user clicks on the link as http: // localhost / dashboard / gallery / publish / 1 .
I do not know why the published_at
update is updated automatically and is the same as updated_at
?
Here is the controller code :
<?php class GalleryController extends Controller { 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'); } } ?>
and Gallery Model :
<?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']; } ?>
and migration function :
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
I see that this configuration in the Migration function makes the problem, here: $table->timestamp('published_at');
And this statement creates the following SQL:
CREATE TABLE `gallery` ( ... `published_at` Timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ... )
So, how to configure the timestamp field, which is not an automatic update at the current time?
UPDATE 2
Done, I'm changing the wrapping, just use dateTime
instead of timestamp
.
Use it, $table->dateTime('published_at');
, this statement will not be automatically updated at CURRENT_TIMESTAMP.