실제 개발에서는 하위 데이터베이스와 테이블을 자주 사용합니다. 예를 들어, 사용자 테이블은 100개의 테이블로 나누어져 있습니다. 이때 데이터를 쿼리하려면 하위 테이블을 설정해야 합니다. 예를 들어 Laravel의 Model 클래스는 setTable 메소드를 제공합니다. :
/** * Set the table associated with the model. * * @param string $table * @return $this */public function setTable($table){ $this->table = $table; return $this; }
그래서 데이터 테이블 추가 삭제, 수정, 쿼리를 하려면 먼저 새로운 모델 인스턴스를 생성한 후 테이블 이름을 설정해야 합니다. 예:
(new Circle())->setTable("t_group_" . hashID($userid, 20))->newQuery()->where('group_id', $request->group_id)->update($attributes);
매우 간단한데 HasOne, HasMany 등의 모델 간 관계에서 이 방법을 사용할 때 하위 테이블을 어떻게 설정합니까?
오랜 시간 동안 검색했지만 좋은 해결책을 찾지 못했습니다. HasOne을 예로 들면 Model 클래스의 HasOne 메서드를 복사하여 myHasOne으로 변경하고 테이블 이름을 전달한 후 setTable을 호출해야 했습니다. 객체는 함수에서 인스턴스화됩니다. 물론 작동합니다.
코드는 다음과 같습니다.
public function detail(){ return $this->myHasOne(Circle::class, 'group_id', 'group_id', 't_group_' . hashID($this->userid, 20)); } public function myHasOne($related, $foreignKey = null, $localKey = null, $table){ $foreignKey = $foreignKey ?: $this->getForeignKey(); $instance = (new $related)->setTable($table); $localKey = $localKey ?: $this->getKeyName(); return new HasOne($instance->newQuery(), $this, $instance->getTable() . '.' . $foreignKey, $localKey); }
더 우아한 방법이 있는지 궁금합니다.
laravel 프레임워크와 관련된 더 많은 기술 기사를 보려면 laravel 튜토리얼 칼럼을 방문하세요!
위 내용은 Laravel 모델 간의 관계에 대한 하위 테이블 설정 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!