php - 在不迁移的情况下向 Eloquent 模型添加一列 -PHP

标签 php mysql laravel eloquent migrate

我有一个多年以来已迁移到不同服务器的旧项目。因此,我无法在该项目上运行任何 artisan 命令。

我想向现有模型用户添加一列“sessiontime”。我在数据库表中添加了列 - ALTER TABLE users ADD COLUMN sessiontime VARCHAR(1025) NULL AFTER session;

在我的用户模型 - User.php 中,我添加了以下代码:

public function setSessiontime($sessiontime)
{
  $this->sessiontime = $sessiontime;
}

public function getSessiontime()
{
  return $this->sessiontime;
}

在我的一个 Controller 中,我正在这样做:

$user = User::select('id')->where('email', 'a.b@c.com')->first();
$user->sessiontime = "RANDOMString";
$user->save();

但该列未被填充。

是否可以在不运行 artisan migrate 的情况下向现有表添加列? 谢谢

最佳答案

这可能是由于 Laravel 对 mass assignment 的默认保护.对于任何 Eloquent 模型,您可以选择定义其中之一(但不能同时定义两者)$guarded$fillable 阵列。 $guarded 数组用作不可可批量分配的属性黑名单,而 $fillable 属性作为可批量分配的属性的白名单。

要解决您的问题,您可能只需要将 sessiontime 属性添加到您的 $fillable 数组:

protected $fillable = [ ..., 'sessiontime'];

关于php - 在不迁移的情况下向 Eloquent 模型添加一列 -PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58226103/

相关文章:

php - 2038 年问题 - 64 位(Linux 操作系统、php、mysql)

php - 电子邮件 Codeigniter 不工作

php - Symfony 2——匿名页面有空的 "security.context" token ?

mysql - 反向内连接

mysql - SQL有没有办法在不使用UNION的情况下保留元数据的同时将多个时间列排序为一个?

php - Laravel, Controller 中的 Auth::user()

javascript - 使用 window.location.hostname 时生成意外的 URL

php - 普通ajax和长轮询的区别

Mysql存储过程不是有吗?

php - Laravel 8 分页 link() 方法的视觉问题