【问题标题】:How to create database schema (table) in Laravel?如何在 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 等),以便我们可以提供有关如何创建数据库的指导。

标签: database laravel


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-21
      • 2019-07-24
      • 2015-08-14
      • 2022-01-24
      • 2016-04-25
      • 2021-01-03
      • 2018-11-09
      • 1970-01-01
      相关资源
      最近更新 更多