Полиморфные многие-ко-многим в Laravel не отсоединяются?
У меня полиморфны многие ко многим User
/Location
- Group
отношения, но у меня есть время, чтобы пройти базовое модульное тестирование.
/** @test */
public function it_can_have_groups()
{
$user = factory(User::class)->create();
$group = factory(Group::class)->create();
$user->addToGroup($group);
$this->assertCount(1, $user->groups); // true
$user->removeFromGroup($group);
$this->assertCount(0, $user->groups); // false
}
Эти методы просто вызывают attach
а также detach
согласно документации:
Чтобы удалить запись отношения "многие ко многим", используйте метод detach. Метод detach удалит соответствующую запись из промежуточной таблицы; однако обе модели останутся в базе
public function addToGroup(Group $group)
{
$this->groups()->attach($group->id);
}
public function removeFromGroup(Group $group)
{
$this->groups()->detach($group->id));
dump($group->users()); // []
}
Так что, похоже, это работает (?), Но только со стороны групп, и утверждение по-прежнему не работает. Почему и что мне делать по-другому?
1 ответ
Решение
Это может быть так же просто, как у модели, которую вы тестируете, устаревшие отношения. Попробуй это:
/** @test */
public function it_can_have_groups()
{
$user = factory(User::class)->create();
$group = factory(Group::class)->create();
$user->addToGroup($group);
$this->assertCount(1, $user->groups->fresh()); // true
$user->removeFromGroup($group);
$this->assertCount(0, $user->groups->fresh()); // false
}