>데이터 베이스 >MySQL 튜토리얼 >Laravel의 여러 데이터베이스에서 BelongsToMany 관계에 액세스하는 방법은 무엇입니까?

Laravel의 여러 데이터베이스에서 BelongsToMany 관계에 액세스하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 07:53:03631검색

How to Access a BelongsToMany Relationship Across Multiple Databases in Laravel?

Laravel의 여러 데이터베이스에서 BelongsToMany 관계에 액세스

다른 데이터베이스에 저장된 모델로 작업할 때 Laravel의 ownToMany 관계에 문제가 발생할 수 있습니다. 피벗 테이블이 대상 모델과 동일한 데이터베이스에 없는 경우. 이를 극복하려면 피벗 테이블의 데이터베이스 이름을 명시적으로 지정해야 합니다.

이를 위해서는 피벗 테이블이 포함된 모델에서 ownToMany 관계를 다음과 같이 수정하세요.

<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에서는 피벗 테이블에 대한 액세스를 용이하게 하기 위해 대상 데이터베이스를 테스트 연결에 연결해야 합니다. 이는 다음 코드를 사용하여 달성할 수 있습니다.

<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>

트랜잭션 사용에 주의하는 것이 중요합니다. 현재 연결이 트랜잭션을 사용하는 경우 ATTACH DATABASE 문은 실패합니다. 반대로, 관련 연결이 트랜잭션을 사용하는 경우 결과 데이터는 현재 연결에서 숨겨집니다.

연결된 데이터베이스를 정리하려면 마이그레이션 롤백을 실행하거나 구조를 유지하면서 테이블을 자를 수 있습니다.

다른 옵션으로는 첨부된 데이터베이스를 임시 파일에 복사하고 테스트 후 소스를 교체하거나 SQLite 데이터베이스 파일의 쉽게 액세스할 수 있는 특성을 활용하는 것이 있습니다.

위 내용은 Laravel의 여러 데이터베이스에서 BelongsToMany 관계에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.