Mam problem z wymownym morphOne
relacji, gdzie jest tworzenie nowych wpisów zamiast aktualizującego ten, który już istnieje.związek Eloquent morphOne nie ogranicza się do jednego stosunku
Zasadniczo mam kilka modeli (na przykład, powiedzmy Person
i Building
), że zarówno potrzeba lokalizację, więc stworzyliśmy Location
model:
class Location extends Eloquent {
public function locationable()
{
return $this->morphTo();
}
}
Następnie w moich innych modeli mam to :
class Person extends Eloquent {
// ...
/**
* Get the person's location
*
* @return Location
*/
public function location()
{
return $this->morphOne('Location', 'locationable');
}
// ...
class Building extends Eloquent {
// ...
/**
* Get the building's location
*
* @return Location
*/
public function location()
{
return $this->morphOne('Location', 'locationable');
}
// ...
Kiedy uruchomić następujący kod testowy, to cre wpis położenia jest w porządku, ale jeśli go powtórzę, tworzy więcej wpisów.
$person = Person::first();
$loc = new Location;
$loc->lat = "123";
$loc->lng = "321";
$person->location()->save($loc);
Czy robię coś nie tak? Liczyłam morphOne
ograniczyć to do jednej pozycji na typ, więc ostatni wpis w poniższej tabeli nie powinny istnieć:
+---------------------+--------------------------+
| locationable_id | locationable_type |
+---------------------+--------------------------+
| 2 | Building |
| 3 | Building |
| 2 | Person |
| 2 | Building |
+---------------------+--------------------------+
Nie, nie robisz to źle. Tak po prostu działa. Stosunki polimorficzne są dobre dla łatwego rzeczy, ale im dalej, tym więcej błędów można znaleźć. –
Więc sugerujesz ich unikać w miarę możliwości? Nie ma dla mnie sensu robienie niczego innego, ale tworzenie relacji polimorficznej. 1) Ktoś sugeruje robi proste, jeśli jeszcze sprawdzić, czy 'orderable_type' jest pusty następnie tworzyć, aktualizować inaczej, jaka jest wasza opinia na ten temat? 2) https://i.imgur.com/gPmh1OK.png Opinia na ten temat? Chciałbym to usłyszeć. Dziękuje. – Pavan