Wir wollen Composite Primärschlüssel mit Eloquent ORM und Laravel 5 für http://www.mbarendezvous.com/ implementieren Ich verstehe, dass es derzeit nicht von Eloquent unterstützt wird. Bitte schlagen Sie vor, was die beste Alternative für die gleiche sein sollte.Composite Primärschlüssel mit Eloquent
Antwort
können Sie überschreiben die Methode save() auf Ihrer Klasse, Modell erweitert, das Composite-Tasten wie folgt hat:
public function save(array $options = array())
{
$query = $this->newQueryWithoutScopes();
// MY MODEL SPECIFIC FIX
$query->where('OTHER_ID', '=', $this->OTHER_ID);
// END MY FIX
// the rest of the standard model->save() code is here but I cut it out for brevity.
// Use what is in Model.php already.
}
Ich sah diese Lösung hier: https://github.com/laravel/framework/issues/5517
Dies ist perfekt für ein Update, aber es wird nicht korrekt funktionieren, wenn das Modell erstellt wird. –
in der Migration der folgenden verwenden
$table->primary(['first', 'last']);
Dies fügt einen Index und Einschränkungen hinzu. Aber eloquent funktioniert immer noch nicht mit zusammengesetzten Schlüsseln. –
Sie können die setKeysForSaveQuery
-Methode aus Laravels Model-Klasse überschreiben. Sie können diese Methode wie folgt ändern:
/**
* Set the keys for a save update query.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
protected function setKeysForSaveQuery(Builder $query)
{
$query->where($this->getKeyName(), '=', $this->getKeyForSaveQuery());
$query->where('secondKeyName', $this->secondKeyName); // <- added line
return $query;
}
Ich verwende den folgenden Code. Es überschreibt die ursprünglichen Model.php-Methoden und berücksichtigt alle Primärschlüssel. Setzen Sie diese in das Modell, das einen zusammengesetzten Primärschlüssel verwendet:
protected function getKeyForSaveQuery()
{
$primaryKeyForSaveQuery = array(count($this->primaryKey));
foreach ($this->primaryKey as $i => $pKey) {
$primaryKeyForSaveQuery[$i] = isset($this->original[$this->getKeyName()[$i]])
? $this->original[$this->getKeyName()[$i]]
: $this->getAttribute($this->getKeyName()[$i]);
}
return $primaryKeyForSaveQuery;
}
/**
* Set the keys for a save update query.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
protected function setKeysForSaveQuery(Builder $query)
{
foreach ($this->primaryKey as $i => $pKey) {
$query->where($this->getKeyName()[$i], '=', $this->getKeyForSaveQuery()[$i]);
}
return $query;
}
EDIT: Vergessen Sie nicht, die folgenden in Ihrem Modell Klasse hinzuzufügen, sonst wird dies nicht funktionieren.
public $incrementing = false;
Das funktionierte, sobald ich 'public $ incrementing = false;' an die Spitze meines Modells setzte. – Skrrp
Ja, guter Kommentar! Es hat auch eine Weile gedauert, bis ich es herausgefunden habe :) –
- 1. Composite-Primärschlüssel
- 2. JPA Composite-Primärschlüssel mit Nullwert
- 3. Auto-Inkrement mit Composite-Primärschlüssel
- 4. Laravel Seed Tabelle mit Composite-Primärschlüssel
- 5. Laravel Eloquent updateOrCreate Composite-Schlüssel
- 6. Composite Primärschlüssel Realm/Swift
- 7. Ärger mit Eloquent tatsächlichen primären (Composite) Schlüssel
- 8. Indizes auf Composite Primärschlüssel
- 9. Sql Server Composite Primärschlüssel
- 10. Composite-Primärschlüssel in Django
- 11. Aktualisieren Tabelle mit Composite-Primärschlüssel mit LINQ
- 12. Symfony2 Doctrine ORM Composite Primärschlüssel
- 13. Composite-Primärschlüssel und zusätzliche Indizes
- 14. Composite Primärschlüssel mit Entity Framework erstellen 4.1
- 15. Löschen Einheit mit Composite Key von Primärschlüssel
- 16. Composite-Primärschlüssel und Fremdschlüssel Einschränkungsfehler
- 17. Composite-Primärschlüssel und Fremdschlüssel-Beziehung
- 18. Erhalte Primärschlüssel der Eloquent Modellinstanz
- 19. Hibernate Envers Composite Primärschlüssel relatedId Anfrage
- 20. Ebean - Composite-Primärschlüssel, der Fremdschlüssel enthält
- 21. Varchar und Composite Primärschlüssel in MySQL?
- 22. Sqoop Import: Composite Primärschlüssel und Textprimärschlüssel
- 23. Composite-Schlüssel VS Primärschlüssel + nicht eindeutigen Index
- 24. MySQL Downgrading Composite-Primärschlüssel restriktiver sein
- 25. Composite-Primärschlüssel und Fremdschlüssel Code First
- 26. Unterstützt Composite Primärschlüssel Präfix Suche in Mongodb?
- 27. Wie Composite Primärschlüssel Code definieren erste
- 28. Hibernate Mapping Composite-Primärschlüssel, der Fremdschlüssel enthält
- 29. Composite Primärschlüssel nicht nach Speichern aktualisieren
- 30. Laravel - Beitreten mit einer Tabelle mit Composite-Primärschlüssel
Mögliches Duplikat [Wie ich 5 zusammengesetzte Schlüssel in Modellen in Laravel setzen kann?] (Https://stackoverflow.com/questions/31415213/how-i-can-put-composite-keys-in- models-in-laravel-5) –