Laravel полиморф c многие-ко-многим не отделяются? - PullRequest
0 голосов
/ 13 марта 2020

У меня есть полиморфное c отношение многие ко многим User / Location - Group, но у меня есть время, чтобы пройти базовое c модульное тестирование.

/** @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 Ответ

1 голос
/ 13 марта 2020

Это может быть так же просто, как у модели, которую вы тестируете, с устаревшими отношениями. Попробуйте это:

/** @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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...