8

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. 但事实并非如此。

我这样做对吗?

4

4 回答 4

14

Laravel 缓存配置文件,所以你可能只需要清除缓存:

php artisan config:clear

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

...
DB_PREFIX=admin_
...

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

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

默认情况下应该是这样。

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

于 2018-07-11T06:44:50.227 回答
0

您应该使用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

于 2021-07-27T12:53:29.510 回答
0

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

于 2016-06-01T04:12:51.327 回答
0

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

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


TL;博士

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

于 2016-06-01T04:13:11.340 回答