슈퍼 라벨 웅변 질문 5가지 팁.

지난 5년 동안 저는 Laravel과 합작해 왔습니다. 그 동안 저는 독특한 방식이나 비전형적인 방식으로 제 응용 프로그램에서 데이터를 되돌려야 하는 상황에 부딪혔습니다.Eloquent를 사용하면 Laravel을 사용하여 데이터를 얻는 것이 쉬워졌지만, 내가 하고자 하는 임무를 어떻게 완성하는지 찾아내기 위해 발굴과 이해가 필요한 용례가 있었다.
다음에 나는 그 중의 다섯 개와 모든 코드 예시와 되돌아오는 가상 데이터를 열거했다.이 문서는 최소한 Laravel과 웅변의 모델에 대해 잘 알고 계실 것으로 예상됩니다. 이 문서를 작성할 때 목표는 Laravel 7입니다.이러한 프롬프트는 Laravel 5+ 버전을 사용하는 모든 애플리케이션에 적용됩니다.
만약 당신이 시각 학습자가 더 많다면, 나는 이것들을 따르고 제시한 예를 따를 것이다.
준비됐나요?우리 시작합시다!

조건부로 조회를 구축하다
예를 들어 우리는 재산 모델이 하나 있는데 그 중 하나는 임대료와 애완동물을 기르는 것을 허락하는지에 관한 것이다.우리는 사용자가 우리의 응용 프로그램 example.com/properties?rent=1200&pets=true 에 접근할 때 데이터를 필터하기를 희망합니다.
각 조건(또는 이들 조합)에서 반환하여 속성을 필터링하면 필터링이 빠르게 복잡해질 수 있으며 더 많은 필터가 추가될 수 있습니다.
public function test(Request $request)
{
    if ($request->get('rent') && $request->get('pets')) {
        return Property::where('rent', <=, $request->get('rent'))->where('pets_allowed', true))->get();
    }

    if ($request->get('rent')) {
        return Property::where('rent', <=, $request->get('rent'))->get();
    }

    if ($request->get('pets')) {
        return Property::where('pets_allowed', true))->get();
    }

    return Property::all();
}
반대로, 우리는 조회를 만들어서, 이 조건에 따라 (그것들에 의존하지 않고) 조회에 추가할 수 있다.Model::query () 를 사용하여 본질적으로 웅변적인 검색 차지 문자를 열면 존재하는 필터에 따라where () 문장을 연결할 수 있습니다.마지막 get () 호출이 우리의 데이터를 되돌려줍니다:
public function test(Request $request)
{
    $properties = Property::query();

    if ($request->get('rent')) {
        $properties->where('rent', <=, $request->get('rent'));
    }

    if ($request->get('pets')) {
        $properties->where('pets_allowed', true));
    }

    return $properties->get();
}
이렇게 하면 모든 필터가 하나의 조건문만 필요하고 필터의 조합이 자동으로 이 검색어에 연결될 수 있다.

최신 관계식으로 돌아가기
우리의 이전 속성 모델을 예로 들면 hasMany() 관계에 여러 개의 세입자 모델이 각 세입자 모델과 관련이 있다고 가정한다.모든 부동산 및 부속 임대인을 유치하기 위해 다음과 같은 방법을 사용할 수 있습니다.
public function test(Request $request)
{
    return Property::with('tenants')->get();
}
하지만 룸메이트 한 명만 돌려주고 싶다면?예를 들어 임대차 계약이 만료된 사람이 오늘에서 가장 멀다.위의 with 문장에 대해 플러그인 조회를 실행할 수 있지만, 1로 제한하려고 하면 예상한 값을 되돌려주지 않습니다.
반면 Laravel에서는 여러 쌍이 존재하는 같은 클래스hasOne 관계를 만들 수 있다.다른 조건을 링크하면 추가 모델만 반환됩니다.
그래서 우리 부동산 모델의 관계는 지금 다음과 같다.
public function tenants()
{
    return $this->hasMany(Tenant::class);
}

public function newestTenant()
{
    return $this->hasOne(Tenant::class)->orderBy('lease_expires_at', 'desc');
}
현재 우리가 이전의 테스트 방법으로 돌아가 사용Property::with('newestTenant')으로 수정하면 우리는 단지 한 명의 세입자와 오늘 가장 먼 날짜에 임대차 계약이 만료되는 세입자만 얻을 수 있다.

중첩 값으로 항목 필터링
저희 부동산과 세입자 모델 및 이전의 관계를 사용합니다. 만약에 세입자가 개나 고양이를 키우지 않은 부동산만 돌려주고 싶다면 어떻게 해야 합니까?다음을 사용할 수 있습니다.
public function test(Request $request)
{
    return Property::with(['tenants' => function($query) {
        $query->where('has_dogs', false)->where('has_cats', false);
    }])->get();
}
이것은 부분적으로 작용할 것이다.우리가 되돌아오는 데이터에서 우리는 개나 고양이가 없는 세입자만 볼 수 있다.문제는 한 채의 부동산에 고양이와 개를 키우는 세입자만 있다면 부동산 모델에 빈 세입자만 남았다는 점이다.
내가 하고 싶은 것은 이 속성들을 필터한 다음 필터 관계를 포함하는 속성을 되돌려 주는 것이다.객체에서 foreach 루프를 실행하여 빈 임차인 배열이 있는지 확인하거나 EloquentwhereHas() 방법을 사용할 수 있습니다.
public function test(Request $request)
{
    return Property::whereHas('tenants', function($query) {
        $query->where('has_dogs', false)->where('has_cats', false);
    })->with(['tenants' => function($query) {
        $query->where('has_dogs', false)->where('has_cats', false);
    }])->get();
}
whereHas()를 사용하면 상기 함수는 첫 번째 매개 변수로 입력한 열과 일치하는 속성만 되돌려줍니다.우리의 두 번째 매개 변수는 조회 대상에 연결하는 방법에 따라 이 열을 필터합니다.이런 상황에서 고양이와 개가 없는 세입자는 없다.
그리고 우리는 이 세입자들을 반환한 부동산에 부가하여 결과를 얻는다.

동적 속성 생성 및 삽입
우리의 네 번째 기교에 관해서는 우리가 두 가지 새로운 모델이 있다고 가정하자. 그것이 바로 기술자와 요구이다.데이터 투시표를 바탕으로 그들은 다대다의 관계로 서로 어울린다.
따라서 한 명의 기술자가 다른 기술자와 여러 개의 요청을 공유한다.만약 우리가 한 가지 방식으로 데이터에서 기술자 대상마다 몇 개의 요청이 있는지 한눈에 보고 싶다면 어떻게 해야 합니까?우리는 그것들 중 하나를 지연 불러오기로 하고, 그룹의 길이를 얻거나, 동적 속성을 만들어서 이 값을 계산하고 저장할 수 있다.
먼저 기사 모델의 끝에 다음과 같은 메서드를 추가해야 합니다.
public function getRequestsCountAttribute()
{
    return $this->requests()->count();
}
Laravel에서 생성된 자산은 해당 방법의 특정 명명 규칙을 따릅니다.
  • 용례
  • 부터get
  • 다음 열 이름 포함
  • - Attribute로 종료
  • 따라서 위의 방법은 되돌아오는 기술자에게 requests_count라는 동적 열을 만들고 모델에 추가된 연결 요청의 계수를 포함한다.

    간단한 방법으로 날짜를 필터하다
    다섯 번째도 마지막 건의입니다. 우리 세입자 모형으로 돌아가자.앞에서 언급한 바와 같이, 모든 사람은 임대차 계약이 만료될 때 보류해야 할 열이 있다.그렇다면 2021년 7월에 임대차 계약이 만료되는 사용자만 돌려주고 싶다면?
    우리는 어쩌면 이렇게 할 수 있을지도 모른다.
    public function test(Request $request)
    {
        return Tenant::where('lease_expires_at', 'LIKE', '2021-07-%')->get();
    }
    
    이것은 매우 효과가 있을 것이며, 우리가 원하는 세입자만 돌려줄 것이다.하지만 나는 필요 없는 곳에서 LIKE문장을 사용하는 것을 그리 좋아하지 않는다.그것들은 엉망이 될 수도 있다. 라빌은 우리에게 두 가지 더 좋은 방법을 제공했다.
    public function test(Request $request)
    {
        return Tenant::whereMonth('lease_expires_at', '07')->whereYear('lease_expires_at', '2021)->get();
    }
    
    whereMonthwhereYear를 사용하면 임대 기간이 2021년 7월에 제공된 조합치가 만료되는 모델을 선별할 수 있습니다.만약 우리가 동적 필터 기능을 제공하고자 한다면, 우리는 심지어 $request->get('month') 또는 $request->get('year') 로 하드코딩의 값을 바꿀 수 있다.
    지금 이게 다야!
    다음은 Laravel의 웅변적인 ORM을 사용하여 생산성을 높일 수 있는 5가지 간단하고 효과적인 방법과 조직 기교입니다.또한 쿼리를 최적화하고 전체 코드의 혼란을 줄이는 방법을 생각하기 시작할 수 있습니다.
    만약 이 또는 기타 인터넷 개발 주제에 대해 궁금한 것이 있으면 언제든지 저에게 연락 주십시오!
    정기적으로 웹 개발 기술과 팁을 담은 어셈블리 목록을 보내려면 일주일에 한 번씩 보내는 것을 고려할 수 있습니다. signing up for my newsletter

    좋은 웹페이지 즐겨찾기