为什么 php 迁移会继续在默认收银员模型(用户)上创建列甚至更改为不同的模型
Why does php migration keeps on creating columns on default cashier model (User) even changed to different model
我想将默认收银员的模型更改为我的自定义模型(用户到公司)
我所做的是
- 将 services.php 的模型更改为 App\Models\Companies\Companies::class
- 将我的 .env 更改为 CASHIER_MODEL=App\Models\Companies\Companies
- 发布了收银员迁移并将 table 名称更改为公司,但
php artisan migrate 仍将更新收银员的默认模型,即 Users
// services.php
'stripe' => [
'model' => App\Models\Companies\Companies::class,
'key' => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
'webhook' => [
'secret' => env('STRIPE_WEBHOOK_SECRET'),
'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
],
],
CASHIER_MODEL=App\Models\Companies\Companies // on .env
// on migration
public function up()
{
Schema::table('companies', function (Blueprint $table) {
$table->string('stripe_id')->nullable()->collation('utf8mb4_bin')->index();
$table->string('card_brand')->nullable();
$table->string('card_last_four', 4)->nullable();
$table->timestamp('trial_ends_at')->nullable();
});
}
Laravel 继续从供应商文件夹加载 Cashier 迁移,即使您已将它们发布到 database/migrations 文件夹并进行了编辑。
解决方案是明确告诉 Laravel 忽略供应商迁移。
在AppServiceProvider的register方法中添加:
// Use the Cashier migrations from migration folder instead of vendor folder
Cashier::ignoreMigrations();
记得还要包括:
use Laravel\Cashier\Cashier;
老实说,我认为这是一个 Laravel 收银台错误。默认 Laravel Cashier 迁移应该创建订阅 table 加入您在 Cashier 配置中定义的 Cashier 模型,它应该只将 Cashier 列添加到该模型。无论如何,这是完整的解决方法。
通过将 Cashier::ignoreMigrations();
添加到 register()
方法来禁用 AppServiceProvider.php
中的默认 Laravel 收银员迁移。
namespace App\Providers;
use Laravel\Cashier\Cashier;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
Cashier::ignoreMigrations();
}
}
创建以下迁移:php artisan make:migration create_subscriptions_table
和 php artisan make:migration create_customer_columns
将vendor/laravel/cashier/database/migrations/
中的迁移内容复制到您新创建的迁移文件中。
将对 users
和 user_id
的任何引用替换为您决定使用的 Laravel 收银员模型。
我想将默认收银员的模型更改为我的自定义模型(用户到公司)
我所做的是
- 将 services.php 的模型更改为 App\Models\Companies\Companies::class
- 将我的 .env 更改为 CASHIER_MODEL=App\Models\Companies\Companies
- 发布了收银员迁移并将 table 名称更改为公司,但
php artisan migrate 仍将更新收银员的默认模型,即 Users
// services.php
'stripe' => [
'model' => App\Models\Companies\Companies::class,
'key' => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
'webhook' => [
'secret' => env('STRIPE_WEBHOOK_SECRET'),
'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
],
],
CASHIER_MODEL=App\Models\Companies\Companies // on .env
// on migration
public function up()
{
Schema::table('companies', function (Blueprint $table) {
$table->string('stripe_id')->nullable()->collation('utf8mb4_bin')->index();
$table->string('card_brand')->nullable();
$table->string('card_last_four', 4)->nullable();
$table->timestamp('trial_ends_at')->nullable();
});
}
Laravel 继续从供应商文件夹加载 Cashier 迁移,即使您已将它们发布到 database/migrations 文件夹并进行了编辑。
解决方案是明确告诉 Laravel 忽略供应商迁移。
在AppServiceProvider的register方法中添加:
// Use the Cashier migrations from migration folder instead of vendor folder
Cashier::ignoreMigrations();
记得还要包括:
use Laravel\Cashier\Cashier;
老实说,我认为这是一个 Laravel 收银台错误。默认 Laravel Cashier 迁移应该创建订阅 table 加入您在 Cashier 配置中定义的 Cashier 模型,它应该只将 Cashier 列添加到该模型。无论如何,这是完整的解决方法。
通过将
Cashier::ignoreMigrations();
添加到register()
方法来禁用AppServiceProvider.php
中的默认 Laravel 收银员迁移。namespace App\Providers; use Laravel\Cashier\Cashier; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // } /** * Register any application services. * * @return void */ public function register() { Cashier::ignoreMigrations(); } }
创建以下迁移:
php artisan make:migration create_subscriptions_table
和php artisan make:migration create_customer_columns
将
vendor/laravel/cashier/database/migrations/
中的迁移内容复制到您新创建的迁移文件中。将对
users
和user_id
的任何引用替换为您决定使用的 Laravel 收银员模型。