列不存在laravel工厂

643ylb08  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(358)

我有一张table

public function up()
{
    Schema::create('parties', function (Blueprint $table) {
        $table->id();
        $table->integer('place_id');
        $table->tinyInteger('status')->default(0);
        $table->dateTime('utc_date');
        $table->dateTime('local_date');
        $table->timestamps();
    });

    Schema::table('parties', function (Blueprint $table) {
        $table->index('place_id');

        $table->foreign('place_id')
            ->references('id')
            ->on('places')
            ->onDelete('restrict');
    });
}

模型厂

<?php

/**@var \Illuminate\Database\Eloquent\Factory $factory */

use App\Models\Party;
use Faker\Generator as Faker;

$factory->define(Party::class, function (Faker $faker) {
    $date = $faker->dateTimeBetween(now()->subDays(3), now());

    return [
        'place_id' => $faker->numberBetween(1, 9),
        'status' => $faker->numberBetween(0, 3),
        'utc_date' => $date,
        'local_date' => \Carbon\Carbon::make($date)->addHours(3),
    ];
});

如果我在homecontroller中调用create方法,它将正常工作

factory(Party::class, 10)->create();

但是当我在测试中调用它时,我犯了一个错误
sqlstate[42703]:未定义的列:7错误:关系“parties”的“utc\u date”列不存在第1行:插入“parties”(“place\u id”,“status”,“utc\u date”,“lo…”(sql:在“双方”(“地点\ id”,“状态”,“utc \日期”,“本地\日期”,“更新\时间”,“创建\时间”)中插入值(5,3,2020-08-04 00:34:52,2020-08-04 03:34:52,2020-08-04 11:42:18,2020-08-04 11:42:18)返回“id”)

<?php

namespace Tests\Feature\API;

use App\User;
use Tests\TestCase;
use Laravel\Sanctum\Sanctum;
use App\Models\{Party, Place};
use Illuminate\Foundation\Testing\RefreshDatabase;

class PartiesControllerTest extends TestCase
{
    use RefreshDatabase;

    private User $user;

    protected function setUp(): void
    {
        parent::setUp();
        $this->user =  factory(User::class)->create();
    }

    public function test_get_parties()
    {
        factory(Party::class)->create([
            'place_id' => factory(Place::class)->create()->id,
        ]);

        dd(Party::all());
        Sanctum::actingAs($this->user);
    }
}
k97glaaz

k97glaaz1#

我正在使用第二个数据库进行测试。我连接到此数据库,发现此表尚未刷新。我不知道为什么,因为我用了。为了解决这个问题,我手动添加了这个字段。

pb3s4cty

pb3s4cty2#

试着跑 php artisan migrate:fresh . 如果您使用另一个数据库进行测试并使用另一个 .env 然后尝试运行 php artisan migrate:fresh --env=testing . 例如:可以使用文件 env.testing 以及 APP_ENV=testing 在这个文件里。
可能您后来添加了此字段,但没有刷新数据库。另外,检查visualdb中是否存在该字段。如果没有帮助,试着逃跑 composer dump-autoload 然后重试。

njthzxwz

njthzxwz3#

请确保模型中的可填充数组具有此键,
试着用碳来代替伪造日期

(Carbon::now())->subDays(3);

相关问题