2017-11-17 4 views
0

결과 나는 Product.php 모델에서 내 제품에 대한 범위를 만든 : laravel 웹 사이트에서Laravel 범위 및 검색 내가 laravel 5.5 함께 일하고 있어요

public function scopeApproved($query) 
{ 
    return $query->where('publish', 1); 
} 

을 촬영.

그런 다음 아래에이 검색 결과를 표시하는 코드가 있습니다. 그와

문제는 내 제품 publish 열이 검색 결과에 나타납니다 여전히 0으로 설정되어있는 경우에도입니다.

same goes for products list, still shows in website.

어떻게 해결할 수 있습니까?

+0

범위를 적용해야합니다. 'Product :: approved() -> (...)' – jfadich

+0

@jfadich가 여전히 결과에 표시됩니다. – mafortis

+0

범위를 사용하지 않기 때문에 @mafortis – amit

답변

0

문제는 전역 범위 오히려 로컬 범위를 추가 할 수 있습니다.

당신은 여전히 ​​Product::approved()

을하고 당신에게 로컬 범위를 사용할 수 있지만 전역 범위에 대해 그렇게처럼 Product.php에서 부팅 방법을 만들어야합니다 전역 범위 Product::withoutGlobalScopes()->get();

을하지 않고 제품을 원하는 경우

protected static function boot() 
{ 
    parent::boot(); 

    static::addGlobalScope('publish', function (Builder $builder) { 
     $builder->where('publish', 1); 
    }); 
} 

그렇게해야합니다.

https://laravel.com/docs/5.5/eloquent#global-scopes

+0

어디에서 글로벌 범위를 만들 수 있습니까? 거기에 장인의 명령이 있습니까? – mafortis

+0

이것은이 모델에만 적용되므로 제품 모델 내에 생성하는 것이 좋습니다. – usrNotFound

+0

'유형 오류 : App \ Product :: App \ {closure}()에 전달 된 인수 1은 App \ Builder의 인스턴스 여야합니다. 예를 들어 Illuminate \ Database \ Eloquent \ Builder의 인스턴스는 ' – mafortis

0

시도 :

public function search() 
{ 
    $search = request('search'); 
    $searchType = request('searchType'); 

    if (strcmp($searchType, "posts") == 0) { 
     $posts = Post::approved()->where('title', 'like', "%{$search}%") 
      ->orWhere('description', 'like', "%{$search}%") 
      ->get(); 
    } elseif (strcmp($searchType, "products") == 0) { 
     $products = Product::approved()->where('title', 'like', "%{$search}%") 
      ->orWhere('description', 'like', "%{$search}%") 
      ->get(); 
    } 

    return view('frontend.search', compact('posts', 'products')); 
} 
+0

동일한 결과가 여전히 '공개'값이 '0'인 제품을 보여줍니다 – mafortis