PHP-学说获得关系



我的用户模型与profil

一对多(单向与联接表的单向)关系

但是当我做

$user = $userRepository = $entityManager->getRepository('User');
$user = $userRepository->findOneBy(
                array('username' => $username,
                 'password' => $password)
                );
echo $user->getProfils()->getLibelle();

echo $user->getProfils()[0];

我什么都没有。没有错误。没有结果。我的桌子是创建和完成的。

如果我做

$user = $userRepository = $entityManager->getRepository('User');
$user = $userRepository->findOneBy(
                array('username' => $username,
                 'password' => $password)
                );
echo $user->getUsername();

我的结果很好。

user.php模型

<?php
/**
 * @Entity @Table(name="users")
 **/
    class User
    {
         /** @Id @Column(type="integer") @GeneratedValue **/
        protected $id;
        /** @Column(type="string") **/
        protected $username;
        /** @Column(type="string") **/
        protected $password;
        /** @Column(type="string") **/
        protected $email;
        /**
         * Many User have Many Profils.
         * @ManyToMany(targetEntity="Profil")
         * @JoinTable(name="users_profils",
         *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
         *      inverseJoinColumns={@JoinColumn(name="profil_id", referencedColumnName="id", unique=false)}
         *      )
         */
        private $profils;

        public function __construct()
        {
             $this->profils = new DoctrineCommonCollectionsArrayCollection();
        }

        public function getId()
        {
            return $this->id;
        }
        public function getUsername()
        {
            return $this->username;
        }
        public function setUserName($username)
        {
            $this->username = $username;
        }
        public function getPassword()
        {
            return $this->password;
        }
        public function setPassword($password)
        {
            $this->password = $password;
        }
        public function getEmail()
        {
            return $this->email;
        }
        public function setEmail($email)
        {
            $this->email = $email;
        }
        public function getProfils()
        {
            return $this->profils;
        }
    }
    ?>

profil.php模型

<?php
/**
 * @Entity @Table(name="profils")
 **/
class Profil
{
     /** @Id @Column(type="integer") @GeneratedValue **/
    protected $id;
    /** @Column(type="string") **/
    protected $libelle;
    /** @Column(type="integer") **/
    protected $level;

    public function getId()
    {
        return $this->id;
    }
    public function getLibelle()
    {
        return $this->libelle;
    }
    public function setLibelle($libelle)
    {
        $this->libelle = $libelle;
    }
    public function getLevel()
    {
        return $this->level;
    }
    public function setLevel($level)
    {
        $this->level = $level;
    }
}
?>

你能告诉我我缺少什么吗?

预先感谢。

更新:Profil.php:

class Profil
{
     /** @Id @Column(type="integer") @GeneratedValue **/
    protected $id;
    /** @Column(type="string") **/
    protected $libelle;
    /** @Column(type="integer") **/
    protected $level;
    /**
    * @ManyToOne(targetEntity="User", inversedBy="profils")
    * @JoinColumn(unique=false)
    */
    private $user;

user.php:

 /** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
protected $username;
/** @Column(type="string") **/
protected $password;
/** @Column(type="string") **/
protected $email;

/**
* @OneToMany(targetEntity="Profil", mappedBy="user")
*/
private $profils;

我尝试了:

print_r($user->getProfils()->toArray());

结果:array()

好吧,我找到了解决方案,如果可以帮助某人:

这是最终代码。

user.php

class User
{
     /** @Id @Column(type="integer") @GeneratedValue **/
    protected $id;
/** @Column(type="string") **/
protected $username;
/** @Column(type="string") **/
protected $password;
/** @Column(type="string") **/
protected $email;

/**
 * Many User have Many Profils.
 * @ManyToMany(targetEntity="Profil")
 * @JoinTable(name="users_profils",
 *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="profil_id", referencedColumnName="id", unique=false)}
 *      )
 */
protected $profils;

public function __construct()
{
     $this->profils = new DoctrineCommonCollectionsArrayCollection();
}
public function getProfils()
{
    return $this->profils ;
}

profil.php

/**
 * @Entity @Table(name="profils")
 **/
class Profil
{
     /** @Id @Column(type="integer") @GeneratedValue **/
    protected $id;
    /** @Column(type="string") **/
    protected $libelle;
    /** @Column(type="integer") **/
    protected $level;
    protected $user;

现在我们可以从一个用户那里获得所有profils。

    $userRepository = $entityManager->getRepository('User');
    $user = $userRepository->findOneBy(
        array('username' => $username,
         'password' => $password)
        );
    $profils = $user->getProfils()->toArray();
    foreach($profils as $profil){
        echo $profil->getLibelle() .'<br>';
        echo $profil->getLevel().'<br>';
        echo $profil->getId().'<br>';
    }

编辑:问题是$ user-> getProfils不返回一个对象但是数组集合。

首先,您需要使用getProfils() -> toarray()()

将其转换为

现在您可以迭代并致电其Getter。

$profils = $user->getProfils()->toArray();
for($profils as profil){
   $libelle = $profil->getLibelle()
}

我有一个关系。因此用户可以拥有许多profils。

相关内容

  • 没有找到相关文章

最新更新