Laravel의 데이터베이스 전반에 걸친 BelongsToMany 관계
Laravel에서 presentsToMany 관계를 사용하면 두 모델 사이에 다대다 연관을 설정할 수 있습니다. . 그러나 모델이 다른 데이터베이스에 있는 경우 관계를 설정하려면 추가 구성이 필요합니다. 이 튜토리얼은 Laravel의 여러 데이터베이스에 걸쳐 BeingToMany 관계를 생성하는 과정을 안내합니다.
BelongsToMany 관계 설정
첫 번째 모델에서 관계가 정의됩니다. , 다음과 같이 presentsToMany 메소드를 지정할 수 있습니다:
<code class="php">public function bs() { return $this->belongsToMany('B', 'a_bs', 'a_id', 'b_id'); }</code>
그러나 이 관계에 액세스하려고 하면 대상 모델의 데이터베이스에 피벗 테이블이 존재하지 않는다는 오류가 발생할 수 있습니다.
피벗 테이블용 데이터베이스 지정
이 문제를 해결하려면 피벗 테이블이 있는 데이터베이스를 명시적으로 지정해야 합니다. 다음과 같이 presentsToMany 메소드를 수정하여 이를 수행할 수 있습니다:
<code class="php">public function bs() { $database = $this->getConnection()->getDatabaseName(); return $this->belongsToMany('B', "$database.a_bs", 'a_id', 'b_id'); }</code>
데이터베이스 이름을 동적으로 획득하고 이를 피벗 테이블 이름에 추가함으로써 Laravel은 올바른 데이터베이스에서 피벗 테이블을 찾습니다.
SQLite 데이터베이스에 대한 추가 고려 사항
SQLite 데이터베이스를 사용하는 경우 관계의 올바른 기능을 보장하기 위해 추가 단계가 필요합니다.
SQLite 데이터베이스 연결:
현재 연결에 SQLite 데이터베이스를 연결해야 합니다. 이는 다음 코드를 사용하여 달성할 수 있습니다.
<code class="php">public function bs() { $database = $this->getConnection()->getDatabaseName(); if (is_file($database)) { $connection = app('B')->getConnection()->getName(); $name = $this->getConnection()->getName(); \Illuminate\Support\Facades\DB::connection($connection)->statement("ATTACH DATABASE '$database' AS $name"); $database = $name; } return $this->belongsToMany('B', "$database.a_bs", 'a_id', 'b_id'); }</code>
트랜잭션 처리:
연결된 SQLite 데이터베이스를 처리할 때 트랜잭션을 사용하면 안 됩니다. . ATTACH DATABASE 작업을 방해하고 잠재적으로 데이터를 숨길 수 있습니다.
테스트 후 정리:
부착된 SQLite를 사용하여 단위 테스트를 실행하는 경우 데이터베이스의 경우 후속 테스트에 적절한 데이터베이스 상태를 보장하기 위해 각 테스트 후에 정리 작업을 수행해야 합니다. 테이블을 자르거나 첨부된 데이터베이스 파일을 복사하여 덮어쓸 수 있습니다.
위 내용은 Laravel의 데이터베이스 간에 BelongsToMany 관계를 설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!