Восстановление данных из двух классов во многие ко многим - PullRequest
0 голосов
/ 18 января 2020

У меня есть таблица User и библиотека, между ними много отношений.

Итак, у меня есть таблица user_library.

Мне удается добавить данные в Таблица библиотеки от пользователя, но я не могу восстановить данные впоследствии.

Я добавляю их так:

    $em = $this->getDoctrine()->getManager();
    $repoUser = $em->getRepository('App:User');
    $user = $repoUser->findOneBy(['token' => $token_user]);

    $library = new Library();
    $library->setIdBook($id_book);

    $user->addLibrary($library);
    $em->persist($library);
    $em->persist($user);
    $em->flush();

Я думал, что просто сделать: $user->getLibrary()->getIdBook() будет достаточно, но это не case.

Как вы думаете, я могу получить все id_book, которые соответствуют user?

1 Ответ

0 голосов
/ 18 января 2020

Дело в том, что ваш getLibrary возвращает ArrayCollection, вам нужно указать, какую именно библиотеку вы хотите

$libararies = $user->getLibrary() // <- this returns ArrayCollection
$library = $libraries->first() // <- return 1st element

На основе этого кода вы можете выполнить поиск, например, или просто использовать doctrine для получения библиотека с нужным идентификатором, пользователь, все, что вам нужно прямо из базы данных
РЕДАКТИРОВАТЬ
Допустим, вы хотите, чтобы все библиотеки, которые связаны с пользователем с ID = 4

... // your code
$user = $this->getDoctrine()->getRepository('your user class')->find(4); // here we find your user from DB
$libraries = $user->getLibrary() // here we get all libraries which are in relation with user #4, you might want to rename the function as it returns ArrayCollection of Libraries, not Library
$bookIds = array();
foreach($libraries as $library) {
    $bookIds[] = $library->getIdBook(); 
}
dump($bookIds); // all user #4 book ids
die;
...