>백엔드 개발 >PHP 튜토리얼 >Laravel 다중 테이블 연관 쿼리 문제

Laravel 다중 테이블 연관 쿼리 문제

WBOY
WBOY원래의
2016-08-27 09:06:521673검색

3개의 mysql 데이터 테이블

  • 상품목록(제품)

  • 패키지

  • 패키지 정보 테이블(package_data)입니다.

제품 테이블 주요 필드:

  • id(자체 증가 ID)

  • 이름

  • ...

패키지 테이블 주요 분야 :

  • id(자체 증가 ID)

  • 제목(패키지명)

  • ....

패키지 정보 테이블 주요 항목:

  • id(자체 증가 ID)

  • product_id(제품 ID)

  • package-id(패키지 ID)

  • product_num(제품수)

  • ...

간단한 지침:

한 패키지에 여러 개의 상품이 들어있습니다. 패키지 테이블과 패키지 정보 테이블을 하나의 테이블에 배치할 수도 있었지만, 중복되는 데이터를 줄이기 위해 패키지 테이블을 단순히 세로로 나누었습니다.

여기서 문제가 발생합니다 :-)

  • 위의 경우, 패키지 A에 A제품이 몇 개 포함되어 있는지 알고 싶습니다. 그렇다면 모델에서 관계를 정의하는 방법은 무엇입니까?

  • 위의 상황에서 A제품, B제품 등이 패키지 A와 패키지 B에 총 몇 개가 사용되는지 알고 싶습니다. 그러면 어떻게 운영해야 할까요?

ps: 위의 질문들은 공식문서를 통해 읽어보았으나 제 IQ가 너무 낮아서 이해가 불분명하여 조언을 구하려고 왔습니다.

여러분의 열정적인 지도를 기대합니다^_^

답글 내용:

3개의 mysql 데이터 테이블

  • 상품목록(제품)

  • 패키지

  • 패키지 정보 테이블(package_data)입니다.

제품 테이블 주요 필드:

  • id(자체 증가 ID)

  • 이름

  • ...

패키지 테이블 주요 분야 :

  • id(자체 증가 ID)

  • 제목(패키지명)

  • ....

패키지 정보 테이블 주요 항목:

  • id(자체 증가 ID)

  • product_id(제품 ID)

  • package-id(패키지 ID)

  • product_num(제품 수)

  • ...

간단한 지침:

한 패키지에 여러 개의 상품이 들어있습니다. 패키지 테이블과 패키지 정보 테이블을 하나의 테이블에 배치할 수도 있었지만, 중복되는 데이터를 줄이기 위해 패키지 테이블을 단순히 세로로 나누었습니다.

여기서 문제가 발생합니다 :-)

  • 위의 경우, 패키지 A에 A제품이 몇 개 포함되어 있는지 알고 싶습니다. 그렇다면 모델에서 관계를 정의하는 방법은 무엇입니까?

  • 위의 상황에서 A제품, B제품 등.. 패키지 A와 B에 총 몇 개의 제품이 사용되는지 알고 싶습니다. 그러면 어떻게 운영해야 할까요?

ps: 위의 질문들은 공식문서를 통해 읽어보았으나 제 IQ가 너무 낮아서 이해가 불분명하여 조언을 구하려고 왔습니다.

여러분의 열정적인 지도를 기대합니다^_^

에헴~ 드디어 문서에서 답을 찾았네요. 여기 링크를 클릭하세요. 직접 보려면 "중첩된 즉시 로딩" 섹션을 검색해 보세요.

구체적인 과정을 알려주세요:

hasManyData() 메소드는 패키지 모델에 정의됩니다

<code class="php">public function hasManyData()
{
    return $this->hasMany(PackageData::class, 'package_id', 'id');
}</code>

BelongsToProduct() 메소드는 package_data 모델에 정의되어 있습니다

<code class="php">public function BelongsToProduct()
{
    return $this->belongsTo(Product::class, 'product_id', 'id');
}</code>

컨트롤러에 사용:

<code class="php">$packageList = Package::with('hasManyData', 'package_data.BelongsToProduct')->get();</code>

완료되었습니다!

또 다른 계획

ps: 동료가 제공한 방법은 대략 다음과 같습니다.

<code class="php">$packageList = Package::with('hasManyData')->get();

foreach( $packageList as $key => $val )
{
    ...
    $productList = PackageData::with('BelongsToProduct')->where(...)->get();
    ...
}</code>

공연이 형편없는 것 같아요~더 이상 공부하고 싶지 않아요! 머리가 좀 뜨거워서 쓴 내용이 좀 지저분합니다. 틀린 내용이 있으면 정정해 주시기 바랍니다. 이번 호를 시청해주신 모든 분들께 감사드립니다~

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