Laravel 未知列 'updated_at'
Laravel Unknown Column 'updated_at'
我刚开始使用 Laravel,但出现以下错误:
Unknown column 'updated_at' insert into gebruikers (naam, wachtwoord,
updated_at, created_at)
我知道错误来自迁移 table 时的时间戳列,但我没有使用 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;
}
我一定是忘记了什么...我做错了什么?
在模型中,编写如下代码;
public $timestamps = false;
这行得通。
说明:默认情况下,laravel 会期望 table 中的 created_at 和 updated_at 列。
通过将其设置为 false,它将覆盖默认设置。
使用laravel 5以上的用户必须使用public修饰符否则会抛出异常
Access level to App\yourModelName::$timestamps must be
public (as in class Illuminate\Database\Eloquent\Model)
public $timestamps = false;
Alex 和 Sameer 的回答很好,但也许只是关于为什么需要输入的额外信息
public $timestamps = false;
时间戳在官方上有很好的解释Laravel page:
By default, Eloquent expects created_at and updated_at columns to exist on your >tables. If you do not wish to have these columns automatically managed by >Eloquent, set the $timestamps property on your model to false.
将时间戳设置为 false 意味着您将同时丢失 created_at 和 updated_at,而您可以在模型中设置这两个键。
案例一:
您有 created_at
列但没有 update_at 您可以简单地在您的模型中将 updated_at
设置为 false
class ABC extends Model {
const UPDATED_AT = null;
案例二:
您同时拥有 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;
}
Link 到 laravel 文档 https://laravel.com/docs/9.x/eloquent#timestamps
如果您仍然需要时间戳,但只是忘记在迁移中添加它们,将以下内容添加到您的迁移文件中也可以:
class AddUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->timestamps(); // <-- Add this to add created_at and updated_at
});
}
}
之后不要忘记重新运行 迁移。
php artisan migrate:rollback
php artisan migrate
我刚开始使用 Laravel,但出现以下错误:
Unknown column 'updated_at' insert into gebruikers (naam, wachtwoord, updated_at, created_at)
我知道错误来自迁移 table 时的时间戳列,但我没有使用 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;
}
我一定是忘记了什么...我做错了什么?
在模型中,编写如下代码;
public $timestamps = false;
这行得通。
说明:默认情况下,laravel 会期望 table 中的 created_at 和 updated_at 列。 通过将其设置为 false,它将覆盖默认设置。
使用laravel 5以上的用户必须使用public修饰符否则会抛出异常
Access level to App\yourModelName::$timestamps must be
public (as in class Illuminate\Database\Eloquent\Model)
public $timestamps = false;
Alex 和 Sameer 的回答很好,但也许只是关于为什么需要输入的额外信息
public $timestamps = false;
时间戳在官方上有很好的解释Laravel page:
By default, Eloquent expects created_at and updated_at columns to exist on your >tables. If you do not wish to have these columns automatically managed by >Eloquent, set the $timestamps property on your model to false.
将时间戳设置为 false 意味着您将同时丢失 created_at 和 updated_at,而您可以在模型中设置这两个键。
案例一:
您有 created_at
列但没有 update_at 您可以简单地在您的模型中将 updated_at
设置为 false
class ABC extends Model {
const UPDATED_AT = null;
案例二:
您同时拥有 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;
}
Link 到 laravel 文档 https://laravel.com/docs/9.x/eloquent#timestamps
如果您仍然需要时间戳,但只是忘记在迁移中添加它们,将以下内容添加到您的迁移文件中也可以:
class AddUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->timestamps(); // <-- Add this to add created_at and updated_at
});
}
}
之后不要忘记重新运行 迁移。
php artisan migrate:rollback
php artisan migrate