【问题标题】:How to use global prefix for tables in Laravel 5如何在 Laravel 5 中为表使用全局前缀
【发布时间】:2016-09-30 06:19:34
【问题描述】:

Laravel 中的新功能。可能是一个愚蠢的问题。我有这样的设置数据库:

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => 'mydb',
        'username' => 'myusername',
        'password' => 'mypassword',
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => 'admin',
        'strict' => false,
        'engine' => null,
    ],

通知'prefix' => 'admin'。这是因为我希望所有与网站控制面板相关的表都以 admin 为前缀,例如:admin_users、admin_log 等...

但我一开始就被困住了。我正在尝试通过工匠创建迁移,但它没有创建带有前缀的表。

php artisan make:migration create_users_table --create=users

我希望创建一个名为admin_users 的表。但事实并非如此。

我这样做对吗?

【问题讨论】:

    标签: laravel laravel-5 laravel-5.2 laravel-artisan artisan-migrate


    【解决方案1】:

    Laravel 缓存配置文件,因此您可能只需要清除缓存:

    php artisan config:clear
    

    除此之外,更好的做法是使用.env 文件来定义您的前缀,如下所示:

    ...
    DB_PREFIX=admin_
    ...
    

    并将其加载到您的配置文件中,如下所示:

    'prefix' => env('DB_PREFIX', 'abc')
    

    默认情况下应该是这样的。

    您已经从.env 文件中加载了主机名和端口,那么为什么不对其他值也这样做呢?

    【讨论】:

      【解决方案2】:

      将创建不带前缀的迁移。运行php artisan migrate 后,您应该会看到带有前缀的表

      【讨论】:

        【解决方案3】:

        前缀本身不包含下划线 (_)。要创建 admin_users,您必须使用 admin_ 前缀。
        生成迁移时,您将获得简单的表名,没有前缀。

        使用 prefix = 'admin_'; this: Schema::create('users', function (Blueprint $table) {<...>}); 将导致创建 admin_users 表,因为 Laravel 默认会在后台添加 Your 前缀。


        TL;DR

        即使你的方案显示没有前缀的表名,Laravel 也会用前缀创建它。

        【讨论】:

          【解决方案4】:

          您应该使用Schema::connection($name) 方法将连接应用到架构构建器。

          出于某种原因,如果您只是设置了 connection 属性 - 迁移使用此连接来运行查询,但不会在架构构建期间使用它。

          以下是使用custom连接创建foo表的迁移代码示例:

          <?php
          
          use Illuminate\Database\Migrations\Migration;
          use Illuminate\Database\Schema\Blueprint;
          use Illuminate\Support\Facades\Schema;
          
          class CreateFoo extends Migration
          {
              protected $connection = 'custom';
          
              /**
               * Run the migrations.
               *
               * @return void
               */
              public function up()
              {
                  Schema::connection($this->connection)->create('foo', function (Blueprint $table) {
                      $table->id();
                      $table->timestamps();
                  });
              }
          
              /**
               * Reverse the migrations.
               *
               * @return void
               */
              public function down()
              {
                  Schema::connection($this->connection)->dropIfExists('foo');
              }
          }
          

          此代码已在真实应用中测试,运行良好。

          Laravel 版本:8.40

          【讨论】:

            猜你喜欢
            • 2016-03-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-09
            • 1970-01-01
            • 1970-01-01
            • 2019-01-17
            • 2013-08-25
            相关资源
            最近更新 更多