>백엔드 개발 >PHP 튜토리얼 >Laravel에서 특정 조건을 가진 모델의 최신 관련 모델을 쿼리하는 방법은 무엇입니까?

Laravel에서 특정 조건을 가진 모델의 최신 관련 모델을 쿼리하는 방법은 무엇입니까?

WBOY
WBOY원래의
2016-10-22 00:14:11972검색

방금 StackOverflow에 질문을 올렸는데 답변해 주세요.

http://stackoverflow.com/ques...

Package 모델에는 Step 모델이 많이 있습니다. Step에는 Tinyint 유형 상태 필드와 타임스탬프 필드라는 두 개의 필드가 있습니다.
패키지 A에 다음 단계가 있다고 가정합니다

  • 18일 10시 상태는 1

  • 19일 9시 현재 상태는 2

다음 단계에 따라 패키지 B를 가정합니다

  • 19일 8시 상태는 1

  • 19일 9시 현재 상태는 2

  • 19일 10시 현재 상태는 3

이렇게 하면 A의 최신 스텝 상태는 2, B의 최신 스텝 상태는 3이 됩니다.

그럼 최근 단계 상태가 2인 패키지는 어떻게 조회하나요?

패키지 모델에

을 추가해 보았습니다.
<code>public function steps()
{
    return $this->hasMany('App\Step');
}

public function status()
{
    return $this->steps()->latest()->limit(1);
}
</code>

그럼 이렇게 쿼리해 보세요

<code>Package::whereHas('status', function ($q) {
    $q->where('status', 2);
})->get();
</code>

그런데 기대했던 결과가 나오지 않네요.

소위 예상되지 않은 결과는 패키지 테이블에 B만 있는 경우 최신 단계 상태가 2이고 B의 최신 단계 상태가 3인 패키지를 쿼리하고 싶으므로 결과는 다음과 같아야 합니다. 비어 있지만 쿼리 결과는 다음과 같습니다. 결과는 비어 있지 않지만 B를 포함합니다.

그런 다음

으로 변경해 보았습니다.
<code>public function status()
{
    return $this->hasOne('App\Step')->latest();
}
</code>

여전히 똑같습니다.

라라벨을 막 배웠는데, 이 문제를 접하고 너무 당황스러웠습니다. 구글에도 많이 찾아봤는데 원하는 답이 나오지 않더군요. 당신이 나를 도울 수 있기를 바랍니다. 감사합니다!

Laravel 5.3 사용

답글 내용:

방금 StackOverflow에 질문을 올렸는데 답변해 주세요.

http://stackoverflow.com/ques...

Package 모델에는 Step 모델이 많이 있습니다. Step에는 Tinyint 유형 상태 필드와 타임스탬프 필드라는 두 개의 필드가 있습니다.
다음 단계에 따라 패키지 A를 가정합니다

  • 18일 10시 상태는 1

  • 19일 9시 현재 상태는 2

패키지 B에 다음 단계가 있다고 가정합니다

  • 19일 8시 상태는 1

  • 19일 9시 현재 상태는 2

  • 19일 10시 현재 상태는 3

이렇게 하면 A의 최신 스텝 상태는 2, B의 최신 스텝 상태는 3이 됩니다.

그럼 최근 단계 상태가 2인 패키지는 어떻게 조회하나요?

패키지 모델에

을 추가해 보았습니다.
<code>public function steps()
{
    return $this->hasMany('App\Step');
}

public function status()
{
    return $this->steps()->latest()->limit(1);
}
</code>

그럼 이렇게 쿼리해 보세요

<code>Package::whereHas('status', function ($q) {
    $q->where('status', 2);
})->get();
</code>

그런데 기대했던 결과가 나오지 않네요.

소위 예상되지 않은 결과는 패키지 테이블에 B만 있는 경우 최신 단계 상태가 2이고 B의 최신 단계 상태가 3인 패키지를 쿼리하고 싶으므로 결과는 다음과 같아야 합니다. 비어 있지만 쿼리 결과는 다음과 같습니다. 결과는 비어 있지 않지만 B를 포함합니다.

그런 다음

으로 변경해 보았습니다.
<code>public function status()
{
    return $this->hasOne('App\Step')->latest();
}
</code>

여전히 똑같습니다.

저는 방금 Laravel을 배웠는데 이 문제를 접하고 Google에서도 많은 검색을 했지만 원하는 답변을 찾을 수 없었습니다. 당신이 나를 도울 수 있기를 바랍니다. 감사합니다!

Laravel 5.3 사용

<code>Package::whereHas('steps', function ($q) {
    $q->where('status', 2);
})->get();</code>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.