【问题标题】:Laravel pagination at leftjoinLaravel 在 leftjoin 的分页
【发布时间】:2016-11-11 02:25:04
【问题描述】:

我想在 laravel 上创建带分页的 leftjoin。 如何用leftjoin创建分页?

这是我的代码:

$news = News::leftJoin('categories','news.category_id', '=', 'categories.id')
        ->select('news.*' ,'categories.category')
        ->get()->sortByDesc('created_at');

以前,我使用$news = News::paginate(10); 及其作品,但它没有leftjoin。

这里是我创建分页的 html 代码

{{$news->links('vendor.pagination.pagination')}}

【问题讨论】:

  • sortByDesc() 必须在 get() 之前

标签: php laravel pagination left-join


【解决方案1】:

分页功能应该在 Query Builder 对象上完成,而不是在 get() 返回的集合上。

$news = News::leftJoin('categories','news.category_id', '=', 'categories.id')
        ->select('news.*' ,'categories.category')
        ->paginate(10);

排序也是如此。当您调用get()->sortByDesc() 时,您将获得一个集合,然后通过 PHP 对集合进行排序。通常,您会希望在查询构建器中使用orderBy() 来对 SQL 进行排序。

$news = News::leftJoin('categories','news.category_id', '=', 'categories.id')
        ->select('news.*' ,'categories.category')
        ->orderBy('created_at', 'DESC')
        ->paginate(10);

【讨论】:

  • 谢谢你,但它现在得到错误Call to undefined method Illuminate\Database\Query\Builder::links()。如何在我看来显示分页?我一直在使用此代码{{$news->links()}}
  • 你在这里遗漏了一些东西,它说$news 仍然是一个查询构建器对象而不是一个分页器对象。
【解决方案2】:

使用 Eloquent:关系

例如:

News.php 模型

class News extends Model
    {
        protected $primaryKey = 'id';

        function withCategories() {
       return $this->hasOne('App\Categories', 'id', 'category_id');
    }

    public function list(){
         News::with('withCategories')->orderBy('created_at', 'DESC')
    ->paginate(10);
    }
}

在 news.blade.php 中(示例)

<table>
<tbody>
@foreach ($news as $news)
<tr>
<th>{{ $news->id }}</th>
<td>{{ $news->title }}</td>
<td>{{ $news->withCategories->title }}</td> <!-- Category name-->
</tr>
@endforeach
</tbody>
</table>
</div>

【讨论】:

    猜你喜欢
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2020-08-01
    • 2015-01-27
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多