Doctrine orm 扩展UserManager以按关系搜索用户(symfony3)

Doctrine orm 扩展UserManager以按关系搜索用户(symfony3),doctrine-orm,fosuserbundle,hwioauthbundle,symfony3.x,Doctrine Orm,Fosuserbundle,Hwioauthbundle,Symfony3.x,我安装了FOSUserbundle和HWI Oauth捆绑包。 我的问题是:我想从存储在关系中的用户实体访问数据。我想访问FOSUserProvider中UserInSocialNetworks的social_network_slug和social_identifier字段中的数据。 其想法是,一个用户可以有多个社交网络登录。(1:n)-当我使用我的google/facebook etc登录登录时,如果社交网络的Id已经存在,我想在社交网络中检查表user_。 /* * This is the

我安装了FOSUserbundle和HWI Oauth捆绑包。 我的问题是:我想从存储在关系中的用户实体访问数据。我想访问FOSUserProvider中UserInSocialNetworks的social_network_slug和social_identifier字段中的数据。 其想法是,一个用户可以有多个社交网络登录。(1:n)-当我使用我的google/facebook etc登录登录时,如果社交网络的Id已经存在,我想在社交网络中检查表user_。
/*
 * This is the User class, depending on fos_userBundle
 */

namespace AppBundle\Entity\Registration;

use Doctrine\Common\Collections\ArrayCollection as ArrayCollection;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * One User can have many social networks
     * @ORM\OneToMany(targetEntity="UserInSocialNetworks", mappedBy="user", cascade={"remove"})
     */
    private $socialnetworks; ....
存储所有用户社交媒体登录的实体类:

<?php

namespace AppBundle\Entity\Registration;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;



/**
 * UserInSocialNetworks
 *
 * @ORM\Table(name="user_in_social_networks")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\Registration\UserInSocialNetworksRepository")
 */
class UserInSocialNetworks
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * Many Socialnetwork Logins have one User
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Registration\User", inversedBy="socialnetworks")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     *
     */
    private $user;

    /**
     * @var int
     *
     * @ORM\Column(name="social_network_slug", type="string", length=255, nullable=true)
     */
    private $socialNetworkSlug;

    /**
     * @var string
     *
     * @ORM\Column(name="social_identifier", type="string", length=255, nullable=true)
     */
    private $socialIdentifier;
因为这是一种关系。
谢谢你的建议

正如您提到的,您已经扩展了
FOSUBUserProvider
我假设您已经为此定义了一个新的服务,如果是这样,那么您可以将条令的实体管理器传递给您的类
@doctor.orm.entity\u manager
。您可以将以下文档作为实体管理器传递

services:
    my.custom.user_provider:
        class:        MyBundle\Security\Core\User\MyFOSUBUserProvider
        arguments: ['@fos_user.user_manager', { facebook: facebook_id }, @doctrine.orm.entity_manager]
然后在你的课堂上,你可以使用这个服务作为

use Doctrine\ORM\EntityManager;
use FOS\UserBundle\Model\UserManagerInterface;
//.... other use statements

class FOSUBUserProvider extends BaseClass
{
    private $em;

    public function __construct(UserManagerInterface $userManager, array $properties, EntityManager $em)
    {
        $this->em = $em;
        parent::__construct($userManager, $properties); /* pass dependencies to parent */
    }

    public function loadUserByOAuthUserResponse(UserResponseInterface $response)
    {
        $this->em->getRepository('AppBundle\Entity\Registration\UserInSocialNetworks')->findBy(....);

        /* Do your stuff here */
    }
}

谢谢,快速准确的回答。你救了我一天!
services:
    my.custom.user_provider:
        class:        MyBundle\Security\Core\User\MyFOSUBUserProvider
        arguments: ['@fos_user.user_manager', { facebook: facebook_id }, @doctrine.orm.entity_manager]
use Doctrine\ORM\EntityManager;
use FOS\UserBundle\Model\UserManagerInterface;
//.... other use statements

class FOSUBUserProvider extends BaseClass
{
    private $em;

    public function __construct(UserManagerInterface $userManager, array $properties, EntityManager $em)
    {
        $this->em = $em;
        parent::__construct($userManager, $properties); /* pass dependencies to parent */
    }

    public function loadUserByOAuthUserResponse(UserResponseInterface $response)
    {
        $this->em->getRepository('AppBundle\Entity\Registration\UserInSocialNetworks')->findBy(....);

        /* Do your stuff here */
    }
}