我正在使用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;
但我有这个错误:
注意:未定义索引:文件
你能帮我解决这个非常简单的案例吗?
由于
答案 0 :(得分:0)
/**
* @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());
}
感谢您的帮助:)