【发布时间】:2019-10-08 08:12:04
【问题描述】:
我正在尝试在此配置文件和可用性表之间创建多对多关系,但在我的测试中,我不断收到关于测试可用性的未定义方法的调用。
这是控制器功能
/**
* Creates association between availability and podcast profile
*
* @param array $availabilities
*/
private function associateAvailability(array $availabilities)
{
$this->podcastProfile->availability()->sync(
array_map(function ($availability) {
$availabilityModel = Availability::where('availability', '=', $availability)->first();
return $availabilityModel->id;
}, $availabilities)
);
}
这是播客档案模型中的方法
/**
* Defines many-to-many relationship between podcasts and availabilities
*/
public function availability(): BelongsToMany
{
return $this->belongsToMany(
'App\Models\Availability',
'podcast_availability',
'podcast_profile_id',
'availability_id'
);
}
这是对方法的测试
/**
* @test
*/
public function it_should_create_availability_relationship()
{
$this->handlePostRequestToController();
$this->assertTrue($this->user->podcastProfile->availability()->exists());
$this->checkAvailability($this->requestData['availability']);
}
这是插入到测试中的检查可用性方法
/**
* Check database
*
* @param $availabilities
*/
private function checkAvailability($availabilities): void
{
foreach ($availabilities as $availability) {
$availabilityModel = Availability::where('availability', '=', $availability)
->first();
$this->assertDatabaseHas('podcast_availability', [
'podcast_profile_id' => $this->user->podcastProfile->id,
'availability_id' => $availabilityModel->id
]);
}
}
这是错误
1) Tests\Feature\PodcastProfileControllerTest::it_should_create_availability_relationship
BadMethodCallException:方法 Illuminate\Database\Eloquent\Collection::availability 不存在。
【问题讨论】: