更新了一列,但'published_at'列也更新了? [Laravel 5]

时间:2016-06-09 11:00:36

标签: php mysql laravel laravel-5 eloquent

在数据库中,我有一个表'文章',其中包含以下列:“title”,“body”,“published_at”,“{{ 1}}'(还有Laravel的'image_name'和'created_at'列。)

以下是我用于创建文章表格的迁移:

updated_at

我的 Article.php 看起来像这样:

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

我希望为数据库中的每条记录(在文章表中)更新列“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); } ... ”,但 id = 18 的除外。所以,在 Tinker 中,我做了以下事情:

image_name

现在' DB::table('articles')->whereNotIn('id', [18])->update(['image_name' => 'pic1.jpg']); '是' pic1.jpg ',除了 id = 18 之外的行。

但是,问题是这也更新了“image_name”列,所以现在日期&数据库中每条记录的时间都相同( id = 18 除外)。

为什么会这样?我有访问者&定义了 Mutators ,但如果我理解得很好 - 他们不应该做任何事情,因为这个命令是明确的,而且它只与更新“published_at”列有关?

1 个答案:

答案 0 :(得分:2)

嘿,这不是laravels问题。

您的数据库中可能有时间戳,因此会自动更改日期。

只需更改

$table->timestamp('published_at');

$table->dateTime('published_at');

然后刷新您的迁移。