【问题标题】:Symfony 2 OneToManySymfony 2 一对多
【发布时间】:2016-01-20 19:09:13
【问题描述】:

致命错误:调用未定义的方法 Doctrine\ORM\PersistentCollection::getPath()

用户实体: 用户.php

namespace AppBundle\Entity;

 use Doctrine\ORM\Mapping as ORM;
 use Symfony\Component\Validator\Constraints as Assert;
 use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
 use Symfony\Component\Security\Core\User\UserInterface;
 use Doctrine\Common\Collections\ArrayCollection;

 /**
  * @ORM\Entity
  * @ORM\Table(name="users")
  */
 class User implements UserInterface, \Serializable
{

/**
 * @ORM\OneToMany(targetEntity="Avatars", mappedBy="user")
 */
protected $avatars;

/**
 * @return mixed
 */
public function getAvatar()
{
    return $this->avatars;
}


public function __construct()
{
    $this->avatars = new ArrayCollection();
}

/**
 * Get avatars
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getAvatars()
{
    return $this->avatars;
}

和头像实体: 头像.php

namespace AppBundle\Entity;

     use Doctrine\ORM\Mapping as ORM;
     use Symfony\Component\Validator\Constraints as Assert;
     use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

     /**
       * @ORM\Entity
       * @ORM\Table(name="avatars")
       */
     class Avatars
     {
/**
 * @ORM\Column(type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="avatars")
 * @ORM\JoinColumn(name="user", referencedColumnName="id")
 */
private $user;


/**
 * @ORM\Column(type="string", length=54)
 */
private $path;

/**
 * @return mixed
 */
public function getPath()
{
    return $this->path;
}

无法从控制器访问 Avatar Entity:

HomeController.php

public function homeAction()
    {
        $usr= $this->get('security.token_storage')->getToken()->getUser();
        var_dump($user->getAvatar()->getPath());exit;
    }

我哪里做错了?刚开始学symfony框架,可能是忘了加什么?

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    您的User 实体包含Avatar 对象的集合,而不仅仅是单个对象。例如,您可以做的是迭代化身并在每个对象上调用getPath(),如下所示:

    foreach ($user->getAvatar() as $avatar) {
        var_dump($avatar->getPath();
    }
    

    顺便说一句,User 类中代码中的方法名称 getAvatar() 具有误导性,因为人们会期望用户只有一个头像而不是头像集合。我会把它重命名为getAvatars()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多