php – 使用查询构建器删除两个表之间的链接
发布时间:2020-12-13 16:04:40 所属栏目:PHP教程 来源:网络整理
导读:我在实体存储库中创建了一个queryBuilder来删除两个表之间的链接. 我有这两个实体 领域: /** * @var int * * @ORMColumn(type="integer") * @ORMId * @ORMGeneratedValue(strategy="AUTO") */private $id;/** * @var string * * @ORMColumn(type="strin
|
我在实体存储库中创建了一个queryBuilder来删除两个表之间的链接.
我有这两个实体 领域: /**
* @var int
*
* @ORMColumn(type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(type="string",length=64)
* @AssertNotBlank
* @AssertLength(max="64")
* @AppAssertDomainName
*/
private $name;
// Some other fields
/**
* @var SshKey[]|ArrayCollection
*
* @ORMManyToMany(targetEntity="AppBundleEntitySshKey",inversedBy="domains")
* @ORMJoinTable(name="domain_sshkey",* joinColumns={@ORMJoinColumn(referencedColumnName="id")},* inverseJoinColumns={@ORMJoinColumn(name="key_id",referencedColumnName="id")}
* )
*/
private $sshKeys;
和SshKeys: /** * @var int * * @ORMColumn(type="integer") * @ORMId * @ORMGeneratedValue(strategy="AUTO") */ private $id; /** * @var DateTime * * @GedmoTimestampable(on="create") * @ORMColumn(type="datetime") */ private $createdAt; // Other fields /** * @var Domain[]|ArrayCollection * * @ORMManyToMany(targetEntity="AppBundleEntityDomain",mappedBy="sshKeys") */ private $domains; 当SshKeys id在域表内的sshKeys字段中时,我试图删除这两个表之间的链接. 所以我在我的DomainRepository中创建了这个查询构建器 public function deleteSshkeyDomainLink($invalidSshkey)
{
$qb = $this->createQueryBuilder('d');
$qb->delete()
->where($qb->expr()->in('ssh.id',':ssh_keys_id'))
->setParameter('ssh_keys_id',$invalidSshkey)
->join('d.sshKeys','ssh')
;
return $qb->getQuery()->execute();
}
但是这个QB返回了这个错误
我不明白为什么这是返回ssh没有定义,因为我已经使用此别名进行了连接. 此查询构建器应该工作吗?我真的不知道怎么解决这个问题. 谢谢你的帮助. 解决方法
当你只需要从域中删除sshKey(它们之间的链接)时,你为什么要删除域?
在Domain实体中,您可以像这样定义方法removeSshKey public function removeSshKey(SshKey $key)
{
$this->sshKeys->removeElement($key);
return $this;
}
然后在控制器中你要删除实体之间的链接,你应该这样称呼它 $domain = $this->getDoctrine()->getRepository('Domain')->find($domainId);
foreach ($domain->getSshKeys() as $sshKey)
{
if ($sshKey->getId() == $invalidSshKeyId)
{
$domain->removeSshKey($sshKey);
}
}
$em = $this->getDoctrine()->getManager();
$em->flush();
这应该删除链接 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
