이번에는 Laravel 모델 간의 관계에 대한 하위 테이블 설정 단계에 대해 자세히 설명하겠습니다. Laravel 모델 간의 관계에 대한 하위 테이블 설정에 대한 주의 사항은 무엇입니까? 봐.
Eloquent는 무엇입니까
Eloquent는 ORM이고 전체 이름은 Object Relational Mapping이며 "객체 관계 매핑"으로 번역됩니다(Database Abstraction 레이어 배열 라이브러리 추상화 레이어로만 간주하는 경우). 너무 과소평가되었을 것이다). 소위 "객체"는 이 기사에서 "모델"이라고 부르는 것입니다. 객체 관계 매핑은 모델 간의 관계입니다. 중국어 문서: http://laravel-china.org/docs/eloquent#relationships
Quote
실제 개발에서는 서브 데이터베이스나 테이블을 사용하는 경우가 많습니다. 예를 들어 사용자 테이블을 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 함수 구현 방법이 없네요. 이므로 HasOne 메서드를 복사하여 수정해야 합니다. 예를 들어 myHasOne으로 변경하고 $table 매개변수를 추가하여 테이블 이름을 설정한 다음 객체가 인스턴스화된 후 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); }
더 우아한 방법이 있는지 모르겠습니다.
이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 도서:
PHP에서 Redis를 작동하는 단계에 대한 자세한 설명
위 내용은 Laravel 모델 간의 관계에 대한 하위 테이블을 설정하는 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!