2つのテーブル間のリンクを削除するために、エンティティリポジトリ内にqueryBuilderを作成しました。クエリビルダーを使用した2つのテーブル間のリンクの削除
私はこの2つのエンティティ
ドメイン持っている:私はSshKeys id
内部sshKeys
フィールドにあるときに、この2つのテーブル間のリンクを削除しようとしています
/**
* @var int
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
*/
private $createdAt;
// Other fields
/**
* @var Domain[]|ArrayCollection
*
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Domain", mappedBy="sshKeys")
*/
private $domains;
:
/**
* @var int
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(type="string", length=64)
* @Assert\NotBlank
* @Assert\Length(max="64")
* @AppAssert\DomainName
*/
private $name;
// Some other fields
/**
* @var SshKey[]|ArrayCollection
*
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\SshKey", inversedBy="domains")
* @ORM\JoinTable(name="domain_sshkey",
* joinColumns={@ORM\JoinColumn(referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="key_id", referencedColumnName="id")}
*)
*/
private $sshKeys;
とSshKeysをドメインテーブル。
だから私は私が参加してきたので、これはssh is not defined
を返している理由を私は理解していない私の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はこのエラーを返す
[Doctrine\ORM\Query\QueryException]
[Semantical Error] line 0, col 39 near 'ssh.id IN(:s': Error: 'ssh' is not defined.[Doctrine\ORM\Query\QueryException]
DELETE AppBundle\Entity\Domain d WHERE ssh.id IN(:ssh_keys_id)
このエイリアス。
このクエリビルダは機能するはずですか?私は本当にこれを解決する方法を本当に知りません。
ありがとうございました。