Laravel 模型工厂 ID 未设置

nro*_*fis 6 php laravel-5 laravel-5.2

我有一个普通的User模型。当我使用它时,系统工作正常。但是现在我正在尝试在与 Laravel 集成的 PHPUnit 中创建单元测试。

我有一个创建用户的工厂:

$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'id' => $faker->randomNumber(9),
        'email' => $faker->safeEmail,
        'first_name' => $faker->firstNameMale,
        'last_name' => $faker->lastName,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});
Run Code Online (Sandbox Code Playgroud)

我将用户更改为以整数 ID 作为主键,但它没有定义为自动增量。因此工厂为 ID 创建随机数。

我还创建了简单的测试:

public function test_id_is_visible() {
    $user = factory(App\User::class)->create();

    $this->actingAs($user);
    $this->visit('/userprofile');
    $this->see($user->id);
}
Run Code Online (Sandbox Code Playgroud)

该测试总是失败,但当我手动导航到页面时似乎没问题。

我注意到在测试$user->id中始终为0。即使在工厂中也不能为0。我检查并 Laravel 将用户正确插入到数据库中并且它具有正确的ID,但在代码中我总是得到 0。

我该怎么做才能获得正确的 ID 值?

编辑 现在我明白,如果我改变$user = factory(App\User::class)->create();$user = factory(App\User::class)->make();用户实例持有一个正确的ID。但是为什么创建清除ID?

Cal*_*ski 7

Laravel 5.8+ 更新确保设置

public $incrementing = false;

在你的模型上。

  • 也修复了 Laravel 5.5 中的问题。 (2认同)

nro*_*fis 3

出现这个问题是因为ID没有定义为自增。
您可以在以下位置找到更多信息:
/sf/answers/2194556031/

即使问题是针对 Laravel 4,它仍然与 Laravel 5.2 相关。