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
Lepaskan: 2024-11-30 21:42:14
asal
672 orang telah melayarinya

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);
    }
}
Salin selepas log masuk

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

    ...
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan