簡體   English   中英

Laravel 未知列'updated_at'

[英]Laravel Unknown Column 'updated_at'

我剛開始使用 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;
}

我一定是忘記了什么......我在這里做錯了什么?

在模型中,編寫以下代碼;

public $timestamps = false;

這會奏效。

說明:默認情況下,laravel 會在您的表中期望 created_at 和 updated_at 列。 通過將其設置為 false,它將覆蓋默認設置。

將時間戳設置為 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;

亞歷克斯和薩米爾的回答很好,但也許只是關於為什么需要放置的附加信息

public $timestamps = false;

時間戳在官方Laravel 頁面上有很好的解釋:

默認情況下,Eloquent 期望 created_at 和 updated_at 列存在於你的 >tables 中。 如果您不希望 >Eloquent 自動管理這些列,請將模型上的 $timestamps 屬性設置為 false。

對於那些使用 laravel 5 或更高版本的人,必須使用 public 修飾符,否則會拋出異常

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

public $timestamps = false;

如果您仍然需要時間戳,但只是忘記將它們添加到遷移中,則將以下內容添加到遷移文件中也將起作用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM