/** * @inheritdoc */ public function findByFacebook(FacebookUser $facebookUser, User $user = null) { $facebookUserTemp = $this->facebookRepository->findByIdFacebook($facebookUser->getIdFacebook()); $facebookFriends = $this->facebookRepository->findByArrayIdFacebook($facebookUser->getFacebookFriendIds()); $facebookUser->setFacebookFriends($facebookFriends); if (empty($facebookUserTemp)) { $facebookUserTemp = $this->persist($facebookUser); } else { $facebookUserTemp->updateFromAnother($facebookUser); $this->entityManager->flush(); } if (empty($user)) { $user = $this->repository->findUserByIdFacebookUser($facebookUserTemp->getId()); if (empty($user)) { $user = $this->repository->createFromFacebookUser($facebookUserTemp); $this->persist($user); } } else { /** @var User $user */ $this->entityManager->createCypherQuery()->query(sprintf('MATCH (u:User), (f:FacebookUser) WHERE ID(u) = %s AND ID(f) = %s CREATE (u)-[:HAS_SOCIAL]->(f)', $user->getId(), $facebookUserTemp->getId()))->getResult(); } return $user; }