我刚刚开始使用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;
}
我一定是忘记了什么……我哪里做错了?
第一个解决方案
如果不需要created_at和updated_at,请在模型中写下面的代码。
public $timestamps = false;
第二个解决方案
如果将来需要使用created_at和updated_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
第一个解决方案
如果不需要created_at和updated_at,请在模型中写下面的代码。
public $timestamps = false;
第二个解决方案
如果将来需要使用created_at和updated_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
将时间戳设置为false意味着您将丢失created_at和updated_at,而您可以在模型中设置这两个键。
案例1:
你有created_at列,但没有update_at列,你可以简单地在你的模型中设置updated_at为false
class ABC extends Model {
const UPDATED_AT = null;
案例2:
您有created_at列和updated_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文档https://laravel.com/docs/9.x/eloquent#timestamps