Полиморфные многие-ко-многим в 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
}
Другие вопросы по тегам