我怎样才能在Laravel中自我加入?

时间:2017-12-07 09:21:34

标签: php laravel self-join

这是我的代码:

$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行结合起来并对它们进行一次查询。知道我该怎么办?

2 个答案:

答案 0 :(得分:3)

试试这个:

在你的页面模型中:

"react-redux": "^5.0.6"

然后

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

答案 1 :(得分:-1)

看看这个例子(我没有测试过):

$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()