1
我有一個類Folder
這些領域:限制用學說註釋加入
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=100)
*/
private $name;
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="UserBundle\Entity\User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
/**
* @var Folder
*
* @ORM\ManyToOne(targetEntity="FileBundle\Entity\Folder", inversedBy="subFolders", cascade={"persist"})
* @ORM\JoinColumn(name="parent_folder_id", referencedColumnName="id")
*
*/
private $parentFolder;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="FileBundle\Entity\Folder", mappedBy="parentFolder")
* @ORM\OrderBy("name")
*/
private $subFolders;
我有我的存儲庫中的函數,選擇文件夾,其中用戶是當前用戶或空。
我想對我的子文件夾有相同的規則。我嘗試了這一點,顯然沒有奏效。
$qb = $this->createQueryBuilder('folder');
$qb
->leftJoin(
'folder.subFolders',
'folders',
'with',
$qb->expr()->orX(
$qb->expr()->isNull('folders.user'),
$qb->expr()->eq('folders.user', ':user')
)
)
->add('where', $qb->expr()->andX(
$qb->expr()->isNull('folder.parentFolder'),
$qb->expr()->orX(
$qb->expr()->isNull('folder.user'),
$qb->expr()->eq('folder.user', ':user')
)
))
->orderBy('folder.name')
->setParameter('user', $user->getId());
return $qb;
好了,查詢的工作,但這並不影響我的子文件夾,因爲我仍然可以由其他用戶創建子文件夾。
如果您可以在正確的方向推動我,任何幫助將不勝感激。
在leftJoin方法中,您必須指定實體作爲第一個參數。您正在加入同一張表,因此您必須加入Folder :: class,而不是folder.subFolders。希望有幫助:) – Vladislav
感謝@Vladislav,但實際上這個連接起作用,因爲我已經能夠通過執行SQL來測試它了。 tmas的答案正是我所需要的。謝謝你嘗試! – Pjetr