Как использовать Union And Paginate в Laravel - PullRequest
0 голосов
/ 09 июня 2018

Я хочу объединить две модели и разбить результат на страницы, но получить ошибку. Ниже приведены мой код вызова и результат:

$this->archive = $this->archive
        ->select (['id','property_id','plan_id','pay_id','price','period','start_at','expire_at'])
        ->whereHas('property',function ($query) use ($user){
        $query->select(['user_id','type_id','title'])->where('user_id',$user);
        })->with(['property'=>function($query){
            $query->select('title','id');
        },'property.owner'=>function($query){
            $query->select('name','family','id');
        },'plan'=>function($query){
            $query->select('title','price','id','status');
        },'transaction'=>function($query){
            $query->select('port','price','id','status','payment_date');
        }]);
    $this->model = $this->model
        ->select (['id', 'property_id','plan_id','pay_id','price','period','start_at','expire_at'])
        ->whereHas('property',function ($query) use ($user){
        $query->select(['user_id','type_id','title'])->where('user_id',$user);
        })->with(['property'=>function($query){
            $query->select('title','id');
        },'property.owner'=>function($query){
            $query->select('name','family','id');
        },'plan'=>function($query){
            $query->select('title','price','id','status');
        },'transaction'=>function($query){
            $query->select('port','price','id','status','payment_date');
        }])
        ->union($this->archive)->orderBy('expire_at','DESC')->paginate ($paginate);

И их результат:

SQLSTATE[21000]: Cardinality violation: 1222 The used SELECT statements have a different number of columns

ПожалуйстаПомоги мне

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Вы можете объединить результаты sql, как это,

$result = $query1->merge($query2);

        $resultSorted = $result->sortByDesc('expire_at');

        $count = $query1->count() + $query2->count();
        $page = $request['page'];
        $perPage = 20;

        $resultSorted = new LengthAwarePaginator(
            $resultSorted->forPage($page, $perPage), $count, $perPage, $page
        );
0 голосов
/ 09 июня 2018

Нумерация страниц с объединением не поддерживается в Laravel, так как не существует элегантного способа сделать это без существенных недостатков.

...