教义和左联

时间:2016-11-02 20:05:02

标签: php symfony doctrine-orm

我正在使用Symfony 3对旧的Web应用程序进行重新编码,我必须处理Doctrine(对我来说不是有趣的部分:/)

我试图从具有另一个表中权限的表中获取文件:

  • 每个用户每个文件的权利(确定唯一索引)
  • 文件可以拥有多个用户权限

这里是MySQL的查询(我必须说非常基本)

SELECT f.*, fr.access_type FROM files f
LEFT JOIN file_rights fr ON (fr.file_id = f.id AND fr.user_id = 2)
WHERE f.code = "xxxx"

所以要用学说做,我有我的2个实体"文件"和" FileRights"

目标是在我的控制器中执行此操作:

$file = $em->getRepository('AppBundle:File')->getFile($code, $this->getUser());

if (!is_null($file) && !is_null($file->getRights()) {
    dump($file->getRights()->getAccessType());
}

并且存储库看起来像这样:

public function getFile($code, $user) {
    return $this->createQueryBuilder('f')
        ->select('f, fr')
        ->leftJoin('f.rights', 'fr', Expr\Join::WITH, 'fr.user = :userId')
        ->where('f.code = :code')
        ->setParameter('userId', $user)
        ->setParameter('code', $code)
        ->getQuery()
        ->getOneOrNullResult();
}

但是我不知道在实体中放什么......我尝试过这样的东西但是没有用......

File.php

class File
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer", options={"unsigned"=true})
     */
     private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="code", type="string", unique=true, length=20)
     */
     private $code;

     ...

     /**
      * @var \AppBundle\Entity\FileRights
      *
      * @ORM\OneToMany(targetEntity="AppBundle\Entity\FileRights", mappedBy="file")
      */
      private $rights;

FileRights.php

class FileRights
{
     ...

     /**
      * @var \AppBundle\Entity\File
      *
      * @ORM\ManyToOne(targetEntity="AppBundle\Entity\File")
      * @ORM\Column(name="file_id", type="string", length=20)
      */
      private $file;

但我有这个错误:

  

注意:未定义索引:文件

你能帮我解决这个非常简单的案例吗?

由于

1 个答案:

答案 0 :(得分:0)

好的一个! FileRights实体中有2个错误。应该是:

/**
  * @var \AppBundle\Entity\File
  *
  * @ORM\ManyToOne(targetEntity="AppBundle\Entity\File", inversedBy="rights")
  * @ORM\JoinColumn(name="file_id", referencedColumnName="id")
  */
  private $file;

并在控制器中:

if (!is_null($file) && !is_null($file->getRights()) {
    dump($file->getRights()[0]->getAccessType());
}

感谢您的帮助:)