Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mentakrifkan dan Menggunakan Kekunci Utama Komposit dalam Model Laravel 5?

Bagaimana untuk Mentakrifkan dan Menggunakan Kekunci Utama Komposit dalam Model Laravel 5?

Susan Sarandon
Susan Sarandonasal
2024-11-30 21:42:14683semak imbas

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

Cara Mentakrifkan Kunci Utama Komposit dalam Model Laravel 5

Dalam Laravel, jadual dengan berbilang kunci utama boleh menimbulkan cabaran apabila memodelkannya. Secara lalai, model Laravel menganggap kunci utama tunggal bernama "id."

Menyesuaikan Kekunci Utama

Untuk mengendalikan kunci utama komposit, di mana berbilang lajur mentakrifkan baris jadual secara unik, kita perlu menyesuaikan model . Walau bagaimanapun, menggunakan tatasusunan atau rentetan yang dipisahkan koma untuk mentakrifkan kunci utama tidak berfungsi dalam Model.php.

Menggunakan Sifat Kunci Utama Komposit

Penyelesaian untuk had ini menggunakan ciri berikut :

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

Melaksanakan Sifat

Letakkan sifat tersebut dalam diri anda direktori "Traits" models dan tambahkannya pada mana-mana model dengan kekunci komposit:

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

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

    ...
}

Pertimbangan Tambahan

  • Pendekatan ini berfungsi dengan baik untuk kebanyakan kes penggunaan.
  • Kes penggunaan yang rumit mungkin memerlukan penyelesaian tersuai.

Atas ialah kandungan terperinci Bagaimana untuk Mentakrifkan dan Menggunakan Kekunci Utama Komposit dalam Model Laravel 5?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn