如何在 Laravel 中创建数据库模式(表)?
Posted
技术标签:
【中文标题】如何在 Laravel 中创建数据库模式(表)?【英文标题】:How to create database schema (table) in Laravel? 【发布时间】:2015-11-18 09:33:16 【问题描述】:我是 Laravel 的新手。我正在尝试在 Laravel 中创建数据库。我在控制台中尝试过:
Schema::create
但它给出了“找不到命令”。我应该安装什么或如何创建数据库?
【问题讨论】:
您应该详细阅读Laravel Migrations Documentation 以了解如何使用迁移并在数据库中创建表。 我从这里看到 - laravel.com/docs/4.2/schema - 它被写入使用:Schema::create
来创建数据库,但它给了我未找到的命令。
Schema::create
将在您的数据库中创建一个表,而不是实际的数据库(当您应该查看 Laravel 5 docs 时,您正在查看 Laravel 4.2 的文档)。 Laravel 迁移并不是真的要创建数据库,只是为了在其中创建结构。您可以使用DB::statement
创建数据库,但由于Schema Builder 旨在与数据库无关,因此它不是以这种方式构建的。您应该指定您正在使用的数据库(mysql、PostgreSQL 等),以便我们可以提供有关如何创建数据库的指导。
【参考方案1】:
我的工作示例:
创建新的工匠命令:
php artisan make:command mysql
App\Console\Commands\mysql.php 的内容:
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class mysql extends Command
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mysql:createdb name?';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a new mysql database schema based on the database config file';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
parent::__construct();
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
$schemaName = $this->argument('name') ?: config("database.connections.mysql.database");
$charset = config("database.connections.mysql.charset",'utf8mb4');
$collation = config("database.connections.mysql.collation",'utf8mb4_unicode_ci');
config(["database.connections.mysql.database" => null]);
$query = "CREATE DATABASE IF NOT EXISTS $schemaName CHARACTER SET $charset COLLATE $collation;";
DB::statement($query);
config(["database.connections.mysql.database" => $schemaName]);
然后运行:(schema_name 是可选的)
php artisan mysql:createdb schema_name
【讨论】:
非常好!感谢分享。 我遇到了一个问题,即迁移运行因已创建的数据库而失败。在清除缓存并重新安装迁移之前,我删除了它并使用它来创建它,这非常有效。谢谢! 我运行“php artisan make:command mysql”,它返回“控制台命令已经存在!”我运行“php artisan mysql:createdb”,它返回““mysql”命名空间中没有定义命令。”【参考方案2】:首先你必须在config文件夹的database.php中设置数据库名称、用户名和密码。它看起来像
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => storage_path('database.sqlite'),
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'news'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
],
],
如果您使用的是 xampp,请右键单击您的项目文件夹,然后单击在此处使用 composer
然后运行以下命令
php artisan migrate:install
你可以像这样创建表格
php artisan make:migration create_users_table
迁移结构
一个迁移类包含两个方法:向上和向下。 up 方法用于向数据库添加新的表、列或索引,而 down 方法应该简单地反转 up 方法执行的操作。
在这两种方法中,您都可以使用 Laravel 模式构建器来富有表现力地创建和修改表。要了解 Schema 构建器上可用的所有方法,请查看其文档。例如,让我们看一个创建航班表的示例迁移:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFlightsTable extends Migration
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::create('flights', function (Blueprint $table)
$table->increments('id');
$table->string('name');
$table->string('airline');
$table->timestamps();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::drop('flights');
要了解所有工匠命令,请运行以下命令
php artisan
更多内容请阅读以下文档http://laravel.com/docs/5.1/migrations
【讨论】:
问题是关于创建此回复中未解决的数据库。 答案只反映如何创建表,而不是数据库。 我不知道为什么这被接受为正确答案。问题是关于如何创建数据库而不是数据库内部的表结构。【参考方案3】:在 Laravel 中设置数据库
在根目录下打开.env
文件
示例:-
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=root
DB_PASSWORD=password
现在运行命令
php artisan migrate:install
php artisan make:migration users // for creating new table
【讨论】:
【参考方案4】:如果您想使用工匠创建模型,请这样做:
php artisan make:model ModelName
【讨论】:
是的,我看到了这些教程,并且我已经看过它们进行迁移。解释了如何创建模型和表,但是如何创建数据库? :) 这取决于你的意思是创建数据库,你想创建实际的数据库(mysql或其他)吗? 是的,mysql 数据库,然后我将创建表 你是否安装了任何 Apache 服务器(例如 XAMPP)你应该去 phpmyadmin 并在那里创建数据库,观看此以供进一步参考:youtube.com/watch?v=dV3JjLhi4Jk 是的,您可以这样做,请参见此处:“dev.mysql.com/doc/refman/5.0/en/creating-database.html”,但由于您是初学者,我认为这样会更容易,请注意,如果您打算通过CLI,您必须为您的连接找到正确的端口。【参考方案5】:我刚刚创建了一个有趣的 Laravel 包,其中包含一些方便的工匠命令,例如创建或删除数据库、转储数据库或从 .sql 转储加载,或者查看模型中存在哪些字段(和字段类型)。 .
查看:https://github.com/vkovic/laravel-commando
【讨论】:
以上是关于如何在 Laravel 中创建数据库模式(表)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel 8 中的工厂在 tinker 中创建虚拟表数据并连接它们?