2016-11-02 31 views
0

我重新编码的旧的Web应用程序与Symfony的3,我必须处理原则(不是最有趣的部分对我来说:/)主义和左的连接

我想从一个文件与另一个表中的权利表:

    每用户文件
  • 未正确的(唯一索引,以确保)
  • 一个文件可以有多个用户权限

下面是MySQL的查询(非常基本的我必须说)

这样做,与教义,我有我的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(); 
} 

但我不知道要放在实体中...我尝试了这样的事情b UT不工作...

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; 

,但我有此错误:

注意:未定义指数:文件

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

谢谢

+0

在黑暗中只是一个镜头:在File.php的“@var \ AppBundle \ Entity \ FileRights“可能被一个Collection取代(因为它是OneToMany关系)。你试过这个吗? – falkodev

+0

哪个操作会触发此错误? –

+0

我想你正在使用'dev'环境。错误页面必须显示有关行号的文件详细信息。另外,我觉得你必须在'$ file' orm配置中提到'inversedBy =“rights”'作为它的双向关系。并且'JoinColumn-file_id'的数据类型必须与'File'的主键相似,即整数。 – Jeet

回答

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()); 
} 

感谢您的帮助:)