Dalam Laravel, jadual dengan berbilang kunci utama boleh menimbulkan cabaran apabila memodelkannya. Secara lalai, model Laravel menganggap kunci utama tunggal bernama "id."
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.
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); } }
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']; ... }
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!