2017-12-07 4 views
-1

여기 내 코드입니다 : 그것은 논리적으로 잘 작동Laravel에서 어떻게자가 참여할 수 있습니까?

$role_id = Auth::user()->role_id; 

$related = Page::where('path', $request->path())->where('method', $_SERVER["REQUEST_METHOD"])->first()->related; 
$pages = Page::where('related', $related)->get(); 

foreach ($pages as $page){ 
    $accessGiven = page_role::where('role_id', $role_id)->where('page_id', $page->id)->first(); 
    if (sizeof($accessGiven) > 0) { 
     return $next($request); 
    } 
} 

return redirect('/'); 

하지만 거대한 데이터 세트에 대한 약간 느립니다. 알다시피, 그것은 실제로 미들웨어이며 대부분의 요청 전에 실행됩니다.

어쨌든 2 행과 3 행을 결합하여 하나의 쿼리를 만들 수 있다고 생각합니다. 어떤 생각을 어떻게 할 수 있습니까? 이 예에서

+0

하나의 쿼리에서'$ related'와'$ pages'에 참여하고 싶습니까? –

+0

@HirenGohel 내 프로젝트에서 일부 페이지는 서로 관련이 있습니다. 이제는 하나의 페이지를 식별하여 관련 페이지를 모두 얻고 싶습니다. 'related' 열은 관련 페이지를 지정합니다. * (관련된 모든 페이지는 동일한 번호를 가짐) * – stack

답변

3

이 시도 후

public function relatedPages(){ 
    return $this->hasMany(self::class, 'related', 'related'); 
} 

$pages = Page::where('path', $request->path())->where('method', $_SERVER["REQUEST_METHOD"])->first()->relatedPages 
+0

정확함, 고맙습니다, upvote – stack

+0

또한 내 정보를 위해 [이] (https://gist.github.com/anonymous/ba92a86799f3f85233d564cd70cb2046)의 오류를 해결할 수있는 방법을 알고 계십니까? 'Type error : App \ Http \ Middleware .... 함수의 인자가 너무 적다. ' – stack

+0

@stack 다음과 같이 해보자.'$ pages = Page :: where ('related ', function ($ query, $ request) use ($ $ _SERVER [ "REQUEST_METHOD"]) -> first() -> related; }} (여기서 'path', $ request-> path()) -> -> get();' –

0

봐 (내가 그것을 테스트하지 않았다) : 페이지 모델에서

:

$requestPath = $request->path(); 
$serverMethod = $_SERVER["REQUEST_METHOD"]; 
$pages = Page::where('related', function($query) use($requestPath,$serverMethod) { 
    $query->where('path', $requestPath)->where('method', 
    $serverMethod)->first()->related; } 
)->get() 
+0

우선, ($ query와 함께) * 함수에'$ request'를 넘겨 주어야합니다. 또한 코드에서 '유형 오류 : App \ Http \ Middleware ....가 작동하는 인수가 너무 적습니다.'오류가 발생합니다. – stack

+0

예 죄송합니다 지금 –

+0

기능을 사용하는 것을 잊어 버리셨습니까? 다시 테스트 할 수 있습니다 – MosCH

관련 문제