Heim >Backend-Entwicklung >PHP-Tutorial >Wie definiere und verwende ich zusammengesetzte Primärschlüssel in Laravel 5-Modellen?

Wie definiere und verwende ich zusammengesetzte Primärschlüssel in Laravel 5-Modellen?

Susan Sarandon
Susan SarandonOriginal
2024-11-30 21:42:14689Durchsuche

How to Define and Use Composite Primary Keys in Laravel 5 Models?

So definieren Sie 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.

Anpassen von Primärschlüsseln

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.

Verwendung des zusammengesetzten Primärschlüsselmerkmals

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);
    }
}

Implementieren des Merkmals

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'];

    ...
}

Zusätzliche Überlegungen

  • Dieser Ansatz funktioniert für die meisten Anwendungsfälle gut.
  • Komplexe Anwendungsfälle können erfordern maßgeschneiderte Lösungen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn