Maison > développement back-end > tutoriel php > Comment définir et utiliser des clés primaires composites dans les modèles Laravel 5 ?

Comment définir et utiliser des clés primaires composites dans les modèles Laravel 5 ?

Susan Sarandon
Libérer: 2024-11-30 21:42:14
original
683 Les gens l'ont consulté

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

Comment définir des clés primaires composites dans les modèles Laravel 5

Dans Laravel, les tables avec plusieurs clés primaires peuvent poser un défi lors de leur modélisation. Par défaut, les modèles Laravel supposent une seule clé primaire nommée « id ».

Personnalisation des clés primaires

Pour gérer les clés primaires composites, où plusieurs colonnes définissent les lignes du tableau de manière unique, nous devons personnaliser le modèle . Cependant, l'utilisation de tableaux ou de chaînes séparées par des virgules pour définir la clé primaire ne fonctionne pas dans Model.php.

Utilisation du trait de clé primaire composite

Une solution à cette limitation consiste à utiliser le trait suivant :

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);
    }
}
Copier après la connexion

Implémentation du Trait

Placez le trait dans le répertoire "Traits" de vos modèles et ajoutez-le à n'importe quel modèle avec des clés composites :

class MyModel extends Eloquent {
    use Traits\HasCompositePrimaryKey; // *** Use the trait ***

    /**
     * The primary key of the table.
     * 
     * @var string
     */
    protected $primaryKey = ['key1', 'key2'];

    ...
}
Copier après la connexion

Considérations supplémentaires

  • Cette approche fonctionne bien pour la plupart des cas d'utilisation.
  • Des cas d'utilisation complexes peuvent nécessiter solutions personnalisées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal