> 백엔드 개발 > PHP 튜토리얼 > Laravel 5 모델에서 복합 기본 키를 정의하고 사용하는 방법은 무엇입니까?

Laravel 5 모델에서 복합 기본 키를 정의하고 사용하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-30 21:42:14
원래의
673명이 탐색했습니다.

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);
    }
}
로그인 후 복사

특성 구현

특성을 models' "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿