laravel 未知列'updated_at'

slmsl1lt  于 2023-02-05  发布在  其他
关注(0)|答案(6)|浏览(205)

我刚开始使用Laravel,就收到了以下错误:
将未知列“updated_at”插入到gebruikers(naam、wachtwoord、updated_at、created_at)中
我知道错误是在你迁移表的时间戳列,但是我没有使用updated_at字段。我以前在学习Laravel教程的时候使用它,但是现在我正在制作(或者尝试制作)我自己的东西。我得到这个错误,即使我没有使用时间戳。我似乎找不到它被使用的地方。这是代码:

主计长

public function created()
{
    if (!User::isValidRegister(Input::all())) {
        return Redirect::back()->withInput()->withErrors(User::$errors);
    }

    // Register the new user or whatever.
    $user = new User;
    $user->naam = Input::get('naam');
    $user->wachtwoord = Hash::make(Input::get('password'));
    $user->save();

    return Redirect::to('/users');
}

路线

Route::get('created', 'UserController@created');

型号

public static $rules_register = [
    'naam' => 'unique:gebruikers,naam'
];

public static $errors;
protected $table = 'gebruikers';

public static function isValidRegister($data)
{
    $validation = Validator::make($data, static::$rules_register);

    if ($validation->passes()) {
        return true;
    }

    static::$errors = $validation->messages();

    return false;
}

我一定是忘了什么...我做错了什么?

wdebmtf2

wdebmtf21#

在模型中,编写以下代码;

public $timestamps = false;

这样就行了。
说明:默认情况下,laravel会在你的表中使用created_at和updated_at列,如果设置为false,它会覆盖默认设置。

htzpubme

htzpubme2#

将时间戳设置为false意味着您将丢失created_at和updated_at,而您可以在模型中设置这两个键。

    • 案例1:**

您有created_at列,但没有update_at,您只需在模型中将updated_at设置为false即可

class ABC extends Model {

const UPDATED_AT = null;
    • 案例2:**

您有created_atupdated_at列,但列名不同
您可以简单地执行以下操作:

class ABC extends Model {

const CREATED_AT = 'name_of_created_at_column';
const UPDATED_AT = 'name_of_updated_at_column';

最后完全忽略时间戳:

class ABC extends Model {

    public $timestamps = false;
}

链接至laravel文档www.example.comhttps://laravel.com/docs/9.x/eloquent#timestamps

dphi5xsq

dphi5xsq3#

亚历克斯和萨米尔的回答很好,但也许只是额外的信息,为什么有必要把

public $timestamps = false;

时间戳很好地解释了官方Laravel页面:
默认情况下,Eloquent希望〉表中存在created_at和updated_at列,如果您不希望〉Eloquent自动管理这些列,请将模型的$timestamps属性设置为false。

guykilcj

guykilcj4#

对于那些使用laravel5或更高版本的用户,必须使用public修饰符,否则会抛出异常

Access level to App\yourModelName::$timestamps must be
public (as in class Illuminate\Database\Eloquent\Model)

public $timestamps = false;
g6baxovj

g6baxovj5#

如果您仍然需要时间戳,但只是忘记将其添加到迁移中,则将以下内容添加到迁移文件中也会起作用:

class AddUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->timestamps(); // <-- Add this to add created_at and updated_at
        });
    }
}

不要忘记在之后重新运行迁移。
x一个一个一个一个x一个一个二个x

wi3ka0sx

wi3ka0sx6#

    • 第一个解决方案**

如果不需要created_atupdated_at,请在模型中编写以下代码。

public $timestamps = false;
    • 第二种解决方案**

如果将来需要使用created_atupdated_at,可以添加列。
创建迁移文件:

php artisan make:migration add_timestamps_fields_to_ users_table

编辑迁移文件:

class AddTimestampsFieldsToUsersTable extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->timestamps();
        });
    }
}

运行迁移:

php artisan migrate

相关问题