【问题标题】:How to get rid of error Unknown column updated_at when table timestamps() was removed删除表时间戳()时如何摆脱错误未知列updated_at
【发布时间】:2020-01-27 16:42:56
【问题描述】:

我有这两个功能。当我尝试插入数据时出现此错误

Column not found: 1054 Unknown column 'updated_at&#039 

所以它一直在搜索“created at”和“updated at”表,但我之前已经摆脱了它,并将其替换为“joined”和“leaved”。如何解决?

在广播服务提供者中

Broadcast::channel('chat', function ($user) {
        $ip = Request::ip();
        $time = now();        
        if (auth()->check() && !session()->has('name'))  { 
            UserInfo::storeUser();
            session()->put('name',$user->name);
            return [
                'id' => $user->id,
                'ip' => $ip,
                'name' => $user->name,
                'joined' => $time,
            ];
        }
    });

架构

   Schema::create('user_info', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('ip');
        $table->string('joined');
        $table->string('leaved');
    });

在登录控制器中

 public function logout() {
    auth()->logout();
    session()->forget('name');
    session()->put('leaved',now());
       return redirect('/');
}

【问题讨论】:

标签: database laravel


【解决方案1】:

Laravel 提供了一种更好的方式来MUTE 表架构中的某些特定字段。对于您的情况,删除表中创建的 at 和更新的 at 列的正确方法是在模型本身中执行此操作,而不是在迁移文件中注释掉时间戳。

在模型中,您可以MUTE时间戳如下所示:

public $timestamps = false;

这可以防止在运行迁移时不创建 created_atupdated_at 列。

如果您想通过重命名updated_atcreated_at 列来重用它们,那么您仍然可以在模型中这样做:

const CREATED_AT = 'joined_at';
const UPDATED_AT = 'logged_out_at';

修改 laravel 模型中的默认特征:

https://laravel.com/docs/8.x/eloquent

【讨论】:

    【解决方案2】:

    这是 laravel 中的模型结构,您可以在其中添加时间戳为 false。

        <?php
    
        namespace App;
    
        use Illuminate\Database\Eloquent\Model;
    
        class modelName extends Model    
        {      
            protected $table = 'tableName';
    
            public $timestamps = false; //add this line
        }
    

    【讨论】:

    • 仅代码的答案在本网站上通常不受欢迎。您能否编辑您的答案以包含一些 cmets 或对您的代码的解释?解释应该回答这样的问题:它有什么作用?它是如何做到的?它去哪儿了?它如何解决OP的问题?请参阅:How to anwser。谢谢!
    【解决方案3】:

    默认情况下,Eloquent 期望 created_atupdated_at 列存在于您的表中。

    如果您不希望 Eloquent 自动管理这些列,请将模型上的 $timestamps 属性设置为 false

    /**
     * Indicates if the model should be timestamped.
     *
     * @var bool
     */
    public $timestamps = false;
    

    如果您需要自定义用于存储时间戳的列的名称,您可以在模型中设置CREATED_ATUPDATED_AT 常量:

    const CREATED_AT = 'creation_date';
    const UPDATED_AT = 'last_update';
    

    另请参阅:

    Eloquent Model Conventions

    【讨论】:

      【解决方案4】:
      public $timestamps = false;
      

      在模型中添加此代码。

      【讨论】:

        【解决方案5】:

        您需要的是向模型 UserInfo 添加以下内容:

        public $timestamps = false
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-07
          • 1970-01-01
          • 1970-01-01
          • 2021-08-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-19
          相关资源
          最近更新 更多