如何在 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 中创建虚拟表数据并连接它们?

如何在 Laravel 5 中创建表迁移

如何在 Laravel Controller 中创建 SQL Join 语句

如何在Laravel中创建唯一索引?

在 laravel 模式中创建价格列

我们如何在 MySQL 工作台模式部分查看在 phpmyadmin 中创建的数据库/表?