본문 바로가기
MySql

MySQL laravel query with closure

by 베이스 공부 2020. 11. 1.
반응형

데이터베이스를 쿼리하고 폐쇄 함수에서 필터를 만들려고하는데, 내 모델 (단순화)은 다음과 같습니다.

Products:
    id,
    sale_id

Sales:
    id,
    provider_id

Provider:
    id

특정 공급자의 모든 제품을 원하므로이 쿼리를 구성했습니다.

Product::with(array
           ('sale'=>function($query){
                $query->where('provider_id', '=', 1);
            })
        )->get();

문제는 결과에 다음과 같이 판매가있는 올바른 제품과 판매가 null 인 잘못된 제품이 포함된다는 것입니다.

[{
    "id": 25,
    "sale": null
},
{
    "id": 26,
    "sale": {
        "id": 15,
        "provider_id": 3
    }
}]

판매가있는 제품 : null은 다른 공급자의 제품입니다. 메모리에서 필터링 할 수 있지만 쿼리에서 null 결과를 피할 수있는 방법이 있다고 생각합니다. 단서가 있습니까?

 

해결 방법

 

판매가 whereHas ( 'sale') 에 있는지 확인하고 특정 제공 업체에 대한 조건을 적용해야합니다.

Product::whereHas('sale', function($query) { 
    $query->where('provider_id', '=', 1); }
)->get();

 

참조 페이지 https://stackoverflow.com/questions/39563081

 

 

반응형

댓글