Skip to content

Commit c7349ef

Browse files
Merge pull request #13 from cedricduffournet/change_civility_association
Change civility association to prevent deleting user in cascade
2 parents 0fd0c67 + b1dacfb commit c7349ef

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

app/src/Controller/CivilityController.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Entity\Civility;
66
use App\Form\CivilityType;
77
use App\Service\CivilityServiceInterface;
8+
use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;
89
use FOS\RestBundle\Controller\AbstractFOSRestController;
910
use FOS\RestBundle\Controller\Annotations as Rest;
1011
use FOS\RestBundle\View\View;
@@ -16,6 +17,7 @@
1617
use Symfony\Component\Form\Form;
1718
use Symfony\Component\HttpFoundation\Request;
1819
use Symfony\Component\HttpFoundation\Response;
20+
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
1921

2022
/**
2123
* Controller used to managed Civility resource.
@@ -204,7 +206,11 @@ public function putCivility(Request $request, Civility $civility): View
204206
*/
205207
public function deleteCivility(Request $request, Civility $civility): View
206208
{
207-
$this->civilityService->deleteCivility($civility);
209+
try {
210+
$this->civilityService->deleteCivility($civility);
211+
} catch (ForeignKeyConstraintViolationException $e) {
212+
throw new BadRequestHttpException('You can not delete this entity');
213+
}
208214

209215
return $this->view([], Response::HTTP_NO_CONTENT);
210216
}

app/src/Entity/User.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class User extends BaseUser
8383
* @var Civility
8484
*
8585
* @ORM\ManyToOne(targetEntity="Civility")
86-
* @ORM\JoinColumn(name="civility_id", referencedColumnName="id", onDelete="CASCADE")
86+
* @ORM\JoinColumn(nullable=false)
8787
* @Groups({"user_info"})
8888
* @Assert\NotBlank()
8989
*/
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DoctrineMigrations;
6+
7+
use Doctrine\DBAL\Schema\Schema;
8+
use Doctrine\Migrations\AbstractMigration;
9+
10+
/**
11+
* Auto-generated Migration: Please modify to your needs!
12+
*/
13+
final class Version20190707102406 extends AbstractMigration
14+
{
15+
public function getDescription(): string
16+
{
17+
return '';
18+
}
19+
20+
public function up(Schema $schema): void
21+
{
22+
// this up() migration is auto-generated, please modify it to your needs
23+
$this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.');
24+
25+
$this->addSql('ALTER TABLE fos_user DROP FOREIGN KEY FK_957A647923D6A298');
26+
$this->addSql('ALTER TABLE fos_user CHANGE civility_id civility_id INT NOT NULL');
27+
$this->addSql('ALTER TABLE fos_user ADD CONSTRAINT FK_957A647923D6A298 FOREIGN KEY (civility_id) REFERENCES civility (id)');
28+
}
29+
30+
public function down(Schema $schema): void
31+
{
32+
// this down() migration is auto-generated, please modify it to your needs
33+
$this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.');
34+
35+
$this->addSql('ALTER TABLE fos_user DROP FOREIGN KEY FK_957A647923D6A298');
36+
$this->addSql('ALTER TABLE fos_user CHANGE civility_id civility_id INT DEFAULT NULL');
37+
$this->addSql('ALTER TABLE fos_user ADD CONSTRAINT FK_957A647923D6A298 FOREIGN KEY (civility_id) REFERENCES civility (id) ON DELETE CASCADE');
38+
}
39+
}

0 commit comments

Comments
 (0)