合并三个不相关的表并在单页上显示结果

时间:2018-06-11 07:15:42

标签: laravel laravel-5.6

我在laravel5.6 vuejs2应用程序中有三个表

  1. Feed(id,message,created_at,updated_at,created_by,updated_by)
  2. 分类广告(id,category_id,标题,说明,关键字,created_at,updated_at,created_by,updated_by)
  3. 新闻(ID,标题,副标题,内容,关键字,created_at,created_by,updated_at,updated_by)。
  4. 我想创建像facebook这样的后端,我可以将所有最新帖子列为故事。在这种情况下,我想用加载更多按钮发布Feed,分类广告和新闻。怎么做到这一点?

    $feed = Feed::latest()->paginate(10);
    $classifieds = Classifieds::latest()->paginate(10);
    $news = News::latest()->paginate(10);
    
    $stories = array_merge(['feed', 'classifieds', 'news']);
    

    这不起作用,我知道这不是正确的方法。我是laravel的学习者,并没有找到太多帮助。

    有人能告诉我如何做到这一点,以便我可以将仪表板页面上与之无关的所有三个表列为最新故事。

1 个答案:

答案 0 :(得分:4)

创建ModelCollection是很酷的方法。

$collection = new ModelCollection();

$feed = Feed::latest();
$classifieds = Classifieds::latest();
$news = News::latest();

$stories = $collection->merge($feed)->merge($classifieds)->merge($news);

编辑: 你可以做那样的分页。

$page = $request->get('page');
$page = $page ?: (Paginator::resolveCurrentPage() ?: 1);

$collection = new ModelCollection();
$feed = Feed::latest();
$classifieds = Classifieds::latest();
$news = News::latest();

$stories = $collection->merge($feed)->merge($classifieds)->merge($news);
$items = new LengthAwarePaginator($stories->forPage($page, 30), $result->count(), 30, $page,['path' => '/search']);

LengthAwarePaginator可以做到这一点,用法是

LengthAwarePaginator(currentPageItems, collection_count, perPage, currentPage)

我希望这是有帮助的。编辑部分无法工作,我只是告诉它,因为lengthawarepaginator可以给你一个想法。