>데이터 베이스 >MySQL 튜토리얼 >Eloquent 모델을 위해 Laravel의 원시 데이터베이스 쿼리에 매개변수를 바인딩하는 방법은 무엇입니까?

Eloquent 모델을 위해 Laravel의 원시 데이터베이스 쿼리에 매개변수를 바인딩하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-20 14:05:13684검색

How to Bind Parameters to Raw Database Queries in Laravel for Eloquent Models?

Eloquent 모델용 Laravel의 원시 데이터베이스 쿼리에 매개변수 바인딩

Laravel의 Eloquent 모델과 함께 원시 데이터베이스 쿼리를 활용하면 유연성이 제공되고 고급 작업이 가능해집니다. 그러나 이러한 쿼리에 매개변수를 바인딩하는 것은 어려울 수 있습니다.

제공된 쿼리에서:

$property = 
    Property::select(
        DB::raw("title, lat, lng, ( 
            3959 * acos( 
                cos( radians(  ?)  ) *
                cos( radians( lat ) ) * 
                cos( radians( lng ) - radians(?) ) + 
                sin( radians(  ?  ) ) *
                sin( radians( lat ) ) 
            )
       ) AS distance")
    )
    ->having("distance", "<", "?")
    ->orderBy("distance")
    ->take(20)
    ->setBindings([$lat, $lng, $lat,  $radius])
    ->get();

쿼리는 바인딩된 매개변수 키와 이름이 일치하는 명명된 자리 표시자(?)를 사용한다는 점에 유의해야 합니다. ) 내 DB::raw.

이 시나리오에서 매개변수 바인딩의 핵심은 setBindings 메소드를 활용하는 데 있습니다. 이 메서드는 쿼리 매개변수에 바인딩할 값 배열을 사용합니다. 예에서:

  • $lat 및 $lng는 ? 위도와 경도를 나타내는 자리 표시자입니다.
  • $lat는 코사인 함수의 두 번째 위치 인수를 설명하기 위해 다시 바인딩됩니다.
  • $radius는 ?

쿼리 체인 끝에서 setBindings를 호출하면 매개변수 값이 올바르게 할당됩니다. 이렇게 하면 "잘못된 매개변수 번호: 명명된 매개변수와 위치 매개변수가 혼합됨" 오류가 해결되고 원시 데이터베이스 쿼리가 올바르게 실행될 수 있습니다.

이 솔루션이 명시적으로 문서화되어 있지 않아 실망스러울 수 있다는 점은 주목할 가치가 있습니다. 그러나 기본 메커니즘을 이해하고 제공된 해결 방법을 사용하면 Laravel의 Eloquent 모델 내에서 원시 데이터베이스 쿼리를 효과적으로 활용할 수 있습니다.

위 내용은 Eloquent 모델을 위해 Laravel의 원시 데이터베이스 쿼리에 매개변수를 바인딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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