【发布时间】:2021-04-24 03:53:26
【问题描述】:
我正在尝试在 laravel 中制作一个测试用例。
-
我有一个 fake User 模型(数据库中存在该模型),并使用
faker->make创建它, -
和一个存在于数据库中的真实 角色模型,
这两个有一个多对多的关系
在我的测试用例中,我将像这里一样关联它们:
public function testAccess()
{
$user = factory(\App\User::class)->make();
$supervisionControllerRole = \App\Role::where('name', 'supervision_controller')->first();
$user->roles->add($supervisionControllerRole);
}
因为我不想在数据库中保存关系,所以我使用add() 而不是attach():
$user->roles()->attach($supervisionControllerRole->id);
//resulting database modification.
问题
我的问题是,当我试图从模型中获取关系时, 没问题。
var_dump($user->roles->first());
但是当我试图获得关系在模型中时,它确实有效。
喜欢我的User 模特:
public function hasRole($roleName)
{
$role_id = Cache::tags(['role_id'])->remember($roleName, 24*3600, function () use ($roleName) {
return \App\Role::where('name', $roleName)->first()->id;
});
return $this->roles()->where('role_id', $role_id)->exists();
}
它将
returns false并尝试$this->roles->count()结果0从模型内部。
我的定义
在User 模型中:
public function roles()
{
return $this->belongsToMany("App\Role", "role_user")->whereNull("deleted_at")->using("App\RoleUser");
}
用户工厂:
$factory->define(User::class, function (Faker $faker) {
return [
'id' => $faker->randomNumber(),
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => Str::random(80), // password
'remember_token' => Str::random(10),
];
});
【问题讨论】:
标签: php laravel unit-testing eloquent eloquent-relationship