Ich habe eine Elternteil und Kind Entitäten, Eltern ein Bild zu sein, und Kind eine Stimme für das BildWarum funktioniert meine Kaskade nicht? - Integrität Einschränkungsverletzung
class Image {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255, name="file_name")
* @var string $fileName
*/
protected $fileName;
/**
* @ORM\Column(type="string", length=255, name="title", nullable=true)
* @var string $title
*/
protected $title = null;
/**
* @ORM\Column(type="string", length=255, name="author", nullable=true)
* @var string $author
*/
protected $author = null;
/**
* @ORM\Column(type="datetime", name="upload_at")
*/
protected $uploadDate;
/**
* @ORM\Column(type="boolean", name="in_pool")
*/
protected $inPool;
/**
* One image has many votes
* @ORM\OneToMany(targetEntity="Vote", mappedBy="image")
*/
private $votes;
Kind zu sein:
class Vote
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Image", inversedBy="votes")
* @ORM\JoinColumn(onDelete="CASCADE")
*/
protected $image;
/**
* @ORM\Column(type="datetime", name="date")
*/
protected $date;
/**
* This is internal variable, it does not have to be mapped into database field
* @var int Counter of votes for an Image
*/
private $counter;
Wie man sehen kann ich das habe @ORM\JoinColumn(onDelete="CASCADE")
in der Entität festgelegt.
aber wenn ich versuche, ein Bild zu entfernen, die Stimmen ich diese bekommen hat:
Eine Ausnahme trat während der Ausführung von ‚DELETE FROM Bild WHERE id =‘ mit params [24]:
SQLSTATE [23000]: Integrität Verletzung Einschränkung: 1451 nicht oder Update eine übergeordnete Zeile löschen: a. Fremdschlüssel fehlschlägt (
konkurs
vote
, CONSTRAINTFK_5A1085643DA5256D
FOREIGN KEY (image_id
) LITERATURimage
(id
))
Der Code verwendet, um ein Bild auf id basierend löschen sieht wie folgt aus:
/**
* @Route("/admin/removeimage/{id}", name="admin-remove-image")
*/
public function adminRemoveImage($id)
{
$em = $this->getEm();
$image = $em->getRepository('AppBundle:Image')->findOneById($id);
$fileName = $image->getFileName();
$em->remove($image);
$em->flush();
unlink('uploads/'.$fileName);
unlink('media/cache/my_thumb/uploads/'.$fileName);
return $this->redirectToRoute('admin-panel');
}
Könnte mir jemand sagen, warum diese Beziehung weiterhin versagt?
UPDATE ist die Ausgabe von SHOW CREATE TABLE vote
mit
| Abstimmung | CREATE TABLE
vote
(id
int (11) NOT NULL AUTO_INCREMENT,date
DATETIME NOT NULL,image_id
int (11) DEFAULT NULL, PRIMARY KEY (id
), SchlüsselIDX_5A1085643DA5256D
(image_id
), ConstraintFK_5A1085643DA5256D
FOREIGN KEY (image_id
) LITERATURimage
(id
)) ENGINE = InnoDB AUTO_INCREMENT = 14 DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci |
Was die Ausgabe von SQL ist: SHOW CREATE TABLE vote' oder Konsole: 'PHP-bin/Konsole Lehre: schema: update --dump-sql'? – fyrye
Sehen Sie sich an, wie Kaskadenoperationen mit Doctrine definiert werden: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-associations.html#transitive-persistence-cascade -Operationen – Cerad
@fyrye Aktualisierte die Frage – aln447