Laravel通过加入值与分页的多对多关系进行排序

时间:2014-06-08 04:25:14

标签: sorting laravel model

让我们说每个用户都有域名,我希望能够以表格格式显示这些域名。

作为用户,我应该能够按域属性进行排序。

域属性包括可排序的实体,例如页面排名。

在laravel中,我抓取了一组与当前登录用户相关的域,如下所示:

            $users = User::with(array('domains' => function($query)
            {
//                    $query->where('name','like','%all%'); //subquery filter

            }))->whereId(Session::get('user')['id'])->first();


        if(isset($sort))
        {
            //What goes here?
        }

我可以像这样结果:

 $domains = $users->domains;

$collection = Paginator::make($domains->toArray(), $page, $pagesize);

要获得结果集,我会这样做:

$collection->getItems();

如何将过滤器应用于域结果以按特定值应用排序?

1 个答案:

答案 0 :(得分:0)

所以我输入了这条消息并决定尝试一下:

public function listView()
    {

        $order = Input::get('order') === 'asc' ? 'asc' : 'desc'; // default desc
        $page = Input::get('page') ? Input::get('page') : 1; // default 1

        $model = new Domain;

        $pagesize = Input::get('pagesize');


        if(isset($pagesize))
        {
            if($pagesize == 'all')
            {
                $pagesize = count($model::all());
            }elseif(!is_numeric($pagesize))
            {
             $pagesize =  DomainsController::$default_pagesize;
            }
        }else{
            $pagesize =  DomainsController::$default_pagesize;
        }




        $users = User::with(array('domains' => function($query)
            {
                $sort = Input::get('sort') ? Input::get('sort') : NULL; // default NULL
                $order = Input::get('order') ? Input::get('order') : 'DESC'; // default DESC
                if(isset($sort))
                {
                    $query->orderBy($sort, $order);
                }

            }))->whereId(Session::get('user')['id'])->first();





        $queries = DB::getQueryLog();
        $last_query = end($queries);



        $domains = $users->domains;




        $queries = DB::getQueryLog();
        $last_query = end($queries);
        var_dump($last_query);

        $collection = Paginator::make($domains->toArray(), $page, $pagesize);


        $data = array(
            'totalCount' => count($domains),
            'pageSize' => $collection->getPerPage(),
            'numberOfPages' => $collection->getLastPage(),
            'currentPage' => $collection->getCurrentPage(),
            'startNumber' => $collection->getFrom(),
            'endNumber' => $collection->getTo(),
            'results' => $collection->getItems(),
            'sortstr'=>((Input::get('pagesize')) ==  '' ? '' : '&pagesize='.(Input::get('pagesize'))).'&order='.($order == 'asc' || null ? 'desc' : 'asc'),
            'querystr'=>(Input::get('pagesize')) ==  '' ? '' : '&pagesize='.(Input::get('pagesize')).'&order='.(Input::get('order') == '' ? 'desc' : (Input::get('order')))
        );


        $this->layout->content = View::make('pages.domains.list',$data);
    }

这是有效的代码。

要回答我自己的问题,我遇到的问题只是函数SEE函数($ query)无法访问$ sort值。