2
Laravel 응용 프로그램에 start_date
및 end_date
특성을 포함하는 구독 모델이 있습니다. 두 개의 쿼리 범위 인 scopeActive와 scopeFuture를 만들어 활성 및 향후 구독을 각각 찾습니다.OR 컨텍스트에서 여러 Laravel 범위 사용
활성 또는 향후 구독을 찾을 수 있도록 OR 문맥에서 두 범위를 모두 사용하여 쿼리를 작성하는 방법을 알고 싶습니다.
서브 스크립 션 모델
/**
* Scope a query to only include active subscriptions.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActive($query)
{
return $query->where('start_date', '<', Carbon::now())
->where('end_date', '>', Carbon::now());
}
/**
* Scope a query to only include future subscriptions.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeFuture($query)
{
return $query->where('start_date', '>', Carbon::now());
}
public function business()
{
return $this->belongsTo('App\Business');
}
비즈니스 모델
.....
public function subscriptions()
{
return $this->hasMany('App\Subscription');
}
사용자 모델
public function business()
{
return $this->hasOne('App\Business');
}
컨트롤러
Subscription::active()->get();
에 요청한? 예 : 'Auth :: user() -> business-> subscriptions() -> get(); ' – Imran
@Imran이 대답에 예제를 추가했습니다. 또한 'business'가 아닌'business()'를 사용하십시오. 당신처럼 그것을 사용하면 비즈니스를 가져오고 그 다음에 구독을 얻습니다. 그러나'business()'를 사용하면 구독이 데이터베이스에서 가져옵니다. 나는이 질문을 다른 질문에도 올렸습니다. – Sandeesh
감사합니다 Sandeesh하지만 업데이트 된 쿼리는'Call to Undefined Method Illuminate \ Database \ Query \ Builder :: subscriptions()'오류를 반환합니다. 관계는 비즈니스 모델에서 명확하게 정의됩니다. – Imran