ホームページ > バックエンド開発 > PHPチュートリアル > Laravel 5モデルで複合主キーを定義して使用する方法は?

Laravel 5モデルで複合主キーを定義して使用する方法は?

Susan Sarandon
リリース: 2024-11-30 21:42:14
オリジナル
675 人が閲覧しました

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

Laravel 5 モデルで複合主キーを定義する方法

Laravel では、複数の主キーを持つテーブルをモデル化するときに問題が発生する可能性があります。デフォルトでは、Laravel モデルは「id」という名前の単一の主キーを想定しています。

主キーのカスタマイズ

複数の列でテーブルの行を一意に定義する複合主キーを処理するには、モデルをカスタマイズする必要があります。 。ただし、配列またはコンマ区切りの文字列を使用して主キーを定義することは、Model.php では機能しません。

複合主キー トレイトの使用

この制限に対する解決策は、次のトレイトを使用することです。 :

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);
    }
}
ログイン後にコピー

トレイトの実装

場所モデルの「Traits」ディレクトリ内の特性を取得し、複合キーを使用してモデルに追加します。

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

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

    ...
}
ログイン後にコピー

追加の考慮事項

  • このアプローチは、ほとんどのユースケースでうまく機能します。
  • 複雑な使用例では、カスタム ソリューションが必要になる場合があります。

以上がLaravel 5モデルで複合主キーを定義して使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート