Heim >Backend-Entwicklung >PHP-Tutorial >Wie definiere und verwende ich zusammengesetzte Primärschlüssel in Laravel 5-Modellen?
In Laravel können Tabellen mit mehreren Primärschlüsseln eine Herausforderung bei deren Modellierung darstellen. Standardmäßig gehen Laravel-Modelle von einem einzelnen Primärschlüssel namens „id“ aus.
Um zusammengesetzte Primärschlüssel zu verarbeiten, bei denen mehrere Spalten Tabellenzeilen eindeutig definieren, müssen wir das Modell anpassen . Allerdings funktioniert die Verwendung von Arrays oder durch Kommas getrennten Zeichenfolgen zum Definieren des Primärschlüssels in Model.php nicht.
Eine Lösung für diese Einschränkung ist die Verwendung des folgenden Merkmals :
namespace App\Model\Traits; // *** Adjust namespace to match your models *** use Illuminate\Database\Eloquent\Builder; trait HasCompositePrimaryKey { /** * Indicates if IDs are incrementing. * * @return bool */ public function getIncrementing() { return false; // Composite keys are not incrementing. } /** * Set keys for a save update query. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ protected function setKeysForSaveQuery(Builder $query) { foreach ($this->getKeyName() as $key) { // Add if isset() if (isset($this->$key)) { $query->where($key, '=', $this->$key); } else { throw new Exception('Missing part of primary key: ' . $key); } } return $query; } /** * Execute query for a single record by ID. * * @param array $ids Array of keys, like [column => value]. * @param array $columns * @return mixed|static */ public static function find($ids, $columns = ['*']) { $me = new self; $query = $me->newQuery(); foreach ($me->getKeyName() as $key) { $query->where($key, '=', $ids[$key]); } return $query->first($columns); } }
Platzieren Sie das Merkmal in den „Eigenschaften“ Ihrer Modelle. Verzeichnis und fügen Sie es zu jedem Modell mit zusammengesetzten Schlüsseln hinzu:
class MyModel extends Eloquent { use Traits\HasCompositePrimaryKey; // *** Use the trait *** /** * The primary key of the table. * * @var string */ protected $primaryKey = ['key1', 'key2']; ... }
Das obige ist der detaillierte Inhalt vonWie definiere und verwende ich zusammengesetzte Primärschlüssel in Laravel 5-Modellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!