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