Laravel sqlite迁移无法正常工作

时间:2019-11-20 07:32:52

标签: laravel sqlite phpunit

我正在将Sqlite用于测试数据库。当我经营一家工厂时,它会显示

SQLSTATE[HY000]: General error: 1 near "auto_increment": syntax error

根据SQLite文档,它们具有autoincrement而不是auto_increment

如何为sqlite定义主键或自动增量?

我正在使用RefreshDatabase特征。

迁移:

Schema::create('teachers', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name', 100);

工厂:

$factory->define(Teacher::class, function (Faker $faker) {
    return [
        'name' => $faker->name
    ];
});

phpunit.xml

   <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>

config / database.php

 'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => database_path('database.sqlite'),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],
....

测试用例

public function user_can_visit_teachers_page()
    {
        $teacher = factory('App\Models\Teacher')->create();

        $response = $this->get(route('teachers.index', $teacher->id));

        $response->assertStatus(200);
    }

完整的错误消息是:

Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1 near "auto_increment": syntax error (SQL: create table `teachers` (`id` int unsigned not null auto_increment primary key, `name` varchar(100) not null))
  • Laravel 5.8
  • PHPUnit 7.5.17
  • PHP 7.2
  • 我在pdo_sqlite文件中启用了php.ini

1 个答案:

答案 0 :(得分:0)

通过遵循此示例对其进行更改。链接:https://laravel.com/docs/5.8/upgrade

Schema::create('teachers', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->string('name', 100);