Mam model plików i wiele (obecnie 3) różnych innych modeli (artykuł, zadanie, zdarzenie), które mogą mieć wszystkie pliki, które są przechowywane w modelu plików.Doctrine - Wiele modeli odwołujących się do tego samego pola identyfikatora w innym modelu
Problem polega na tym, że kiedy generowanie tabel za pośrednictwem CLI-Tool (./doctrine build-all-reload), otrzymuję komunikat o błędzie:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot
add or update a child row: a foreign key constraint fails
(`my_database/articles`, CONSTRAINT `articles_id_files_target_id`
FOREIGN KEY (`id`) REFERENCES `files` (`target_id`))
Plik jest zdefiniowany jako (Brak relacje są zdefiniowany w tym modelu zdefiniowanego):
columns:
id:
primary: true
autoincrement: true
type: integer(4)
target_id: integer(4)
filename: string(255)
[...]
Wszystkie 4 modele tej relacji-definicję:
relations:
Files:
type: many
class: File
local: id
foreign: target_id
T jego jest kod PHP, że Doctrine generuje (BaseFile.php):
public function setUp()
{
parent::setUp();
$this->hasOne('Publication', array(
'local' => 'target_id',
'foreign' => 'id'));
$this->hasOne('Event', array(
'local' => 'target_id',
'foreign' => 'id'));
$this->hasOne('Article', array(
'local' => 'target_id',
'foreign' => 'id'));
$this->hasOne('Job', array(
'local' => 'target_id',
'foreign' => 'id'));
}
rozumiem dlaczego tak się dzieje (ograniczeń nie może być skonfigurowany dla wielu tabel), ale nie mają pojęcia, w jaki sposób mogę rozwiązać ten problem problem bez tabel z plikami mutltiple lub tabelą powiązań.
Czy jest jakiś sposób, aby powiedzieć Doctrine, że nie powinno tworzyć relacji w modelu pliku?
Jakieś dobre pomysły?
Czy mogę zapytać, dlaczego nie rozwiązałeś go przy użyciu tabeli powiązań? Jest to bardzo elastyczne i wydajne rozwiązanie, ponieważ umożliwia połączenie tego samego pliku z różnymi typami treści bez przesyłania go wiele razy. Z twoim obecnym modelem jest to niemożliwe ... – wimvds
Czy naprawdę mogę rozwiązać ten problem przy pomocy jednej tabeli powiązań? jak dałbym doktrynie znać pole "typ"? – smoove
Nie wiem, jak to zrobić z doktryną, ale problem prawdopodobnie leży w doktrynie dodającej tabelę, która jest zależna od innej tabeli ** przed ** tą drugą tabelą została utworzona. –