在数据库中,我有一个表'文章',其中包含以下列:“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
”列有关?
答案 0 :(得分:2)
嘿,这不是laravels问题。
您的数据库中可能有时间戳,因此会自动更改日期。
只需更改
$table->timestamp('published_at');
到
$table->dateTime('published_at');
然后刷新您的迁移。