我正在尝试使用artisan migrate
在sqlite
中创建表格。
我在database.php中有以下内容
'sqlite' => [
'driver' => 'sqlite',
'database' => database_path('database.sqlite'),
'prefix' => '',
],
这是我的迁移类up
函数
Schema::connection('sqlite')->create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
注意: - 我已经通过环境变量将DB_CONNECTION设置为sqlite。
在命令行中我得到nothing to migrate
,并且没有创建数据库(也没有表)。
我是如何在artisan migrate
中sqlite
创建laravel 5
数据库的?
通过工匠创建mysql
表格没有问题。
由于
答案 0 :(得分:3)
因为你没有创建数据库。像这样使用touch
命令来创建新的sqlite数据库。
touch database/database.sqlite
然后像这样配置环境变量
DB_CONNECTION=sqlite
DB_DATABASE=/absolute/path/to/database.sqlite
答案 1 :(得分:1)
为了回答OP的这一部分问题: “有什么想法可以让工匠迁移以在laravel 5中创建sqlite数据库吗?”
在某些情况下,需要对部署和迁移进行脚本编写,我使用Service Provider来检查Sqlite数据库是否存在,如果没有创建,请使用。
以下是步骤:
1)创建一个提供程序并将其保存到app/Providers/SqliteServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class SqliteServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$databaseFile = config('database.connections.sqlite.database');
if (!file_exists($databaseFile)) {
info('Make Sqlite File "' . $databaseFile . '"');
file_put_contents($databaseFile, '');
}
}
}
2)在config/app.php
中注册提供者。例如,在全新的L5.8安装中,SqliteServiceProvider
会像这样放置在RouteServiceProvider
下:
'providers' => [
//...
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\SqliteServiceProvider::class, // <--- HERE
],
3)将以下内容添加/替换为'connections'
的{{1}}元素
config/database.php
4)在我的'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_SQLITE_FILEPATH', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
文件中添加以下内容:
.env
...但是,如果您愿意,可以跳过此步骤,数据库将创建为DB_SQLITE_FILEPATH=/full/path/to/mysqlitefilename.sqlite
。
5)像往常一样运行迁移,并创建sqlite文件,然后进行填充。
答案 2 :(得分:0)
是的,您需要创建一个空的database.sqlite
文件。
如果您希望技术人员加载具体的.env文件,则还应该使用artisan --env
参数。例如,artisan --env=testing migrate
将迫使技术人员加载.env.testing
文件。
答案 3 :(得分:-1)
好的我明白了。 artisan migrate
似乎忽略了env DB_CONNECTION
和database.php默认值(无论如何都会读取env
)。相反,它像.env
文件DB_CONNECTION
一样,设置为sqlite
它的工作原理(另外,如上所述,你需要手动创建数据库文件,这对于制作dbs很痛苦在飞行中。
也意味着您无法动态更改工匠迁移数据库类型(即:sqlite
和mysql
),因为每次更改时都需要更改.env
变量目标数据库类型。