Php Laravel存储库模式查询构建

Php Laravel存储库模式查询构建,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我制作了一个存储库来从数据库中获取记录。一切正常,但如果会话中存在变量,我想添加orderBy方法: 到目前为止,我有: <?php namespace App\Repositories; use App\Models\User; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Session; class UserRepository { protected $user; priva

我制作了一个存储库来从数据库中获取记录。一切正常,但如果会话中存在变量,我想添加
orderBy
方法:

到目前为止,我有:

<?php

namespace App\Repositories;

use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;

class UserRepository
{
    protected $user;
    private   $columns;

    public function __construct(User $user)
    {
        $this->user    = $user;
        $this->columns = ['id', 'email', 'pwd', 'name', 'addr', 'addr_detail', 'addr_no', 'city', 'zip', 'state', 'phone', 'company_number', 'vat_id', 'tax_id', 'unique_string', 'active', 'banned', 'admin'];
    }

    public function getAll()
    {
        if (Session::has('sort')) 
        {
            $sort = Session::get('sort');
            if (isset($sort["users"]) && !empty($sort["users"]))
                $this->user->orderBy($sort['users']['column'], $sort['users']['type']);
        }

        return $this->user->select($this->columns)->withCount([
            'orders',
            'orders as turnover' => function($query) { $query->select(DB::raw("SUM(price) as turnover")); },
            'orders as profit'   => function($query) { $query->select(DB::raw("SUM(profit) as profit")); },
            ])->get();
    }
}

谢谢你的帮助。谢谢,试试这个。。orderBy似乎没有反映到select处的下一个查询

public function getAll()
{
        $query = $this->user;
        if (Session::has('sort')) 
        {
            $sort = Session::get('sort');
            if (isset($sort["users"]) && !empty($sort["users"])) {
                $query = $query->orderBy($sort['users']['column'], $sort['users']['type']);
            }
        }

        return $query->select($this->columns)->withCount([
            'orders',
            'orders as turnover' => function($query) { $query->select(DB::raw("SUM(price) as turnover")); },
            'orders as profit'   => function($query) { $query->select(DB::raw("SUM(profit) as profit")); },
            ])->get();
    }
试试这个

public function getAll()
    {
        $query = $this->user->select($this->columns)->withCount([
            'orders',
            'orders as turnover' => function($query) { $query->select(DB::raw("SUM(price) as turnover")); },
            'orders as profit'   => function($query) { $query->select(DB::raw("SUM(profit) as profit")); },
            ]);

        if (Session::has('sort')) 
        {
            $sort = Session::get('sort');
            if (isset($sort["users"]) && !empty($sort["users"]))
                $query = $query->orderBy($sort['users']['column'], $sort['users']['type']);
        }

        return $query->get();
    }

确保你的
if(isset($sort[“users”])和&!empty($sort[“users”])
让执行进入。

不起作用:(我还添加了一个查询,它运行到我的问题中,没有顺序,你确定执行了
orderBy()
吗?或者试着把它放在主查询之后。我不能在返回后调用它。如果我在->get()之前链入在orderBy('id')这样的硬核中,它正在工作。条件是正确的,这是我尝试的第一件事。我在存储库中,而不是在控制器中,我无法访问$Request。哦,我明白了。我的电脑用完了,明天将尝试第一件事。谢谢,希望它能工作
public function getAll()
    {
        $query = $this->user->select($this->columns)->withCount([
            'orders',
            'orders as turnover' => function($query) { $query->select(DB::raw("SUM(price) as turnover")); },
            'orders as profit'   => function($query) { $query->select(DB::raw("SUM(profit) as profit")); },
            ]);

        if (Session::has('sort')) 
        {
            $sort = Session::get('sort');
            if (isset($sort["users"]) && !empty($sort["users"]))
                $query = $query->orderBy($sort['users']['column'], $sort['users']['type']);
        }

        return $query->get();
    }