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

问题描述 投票:0回答:1

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

  1. Feed(id、消息、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)。

我想创建一个像 Facebook 一样的后端,我可以在其中将所有最新帖子作为故事列出。在这种情况下,我想使用加载更多按钮来发布提要、分类广告和新闻。如何实现这一目标?

$feed = Feed::latest()->paginate(10);
$classifieds = Classifieds::latest()->paginate(10);
$news = News::latest()->paginate(10);

$stories = array_merge(['feed', 'classifieds', 'news']);

这行不通,我知道这不是正确的方法。我是 Laravel 的学习者,在这方面没有找到太多帮助。

任何人都可以告诉我如何执行此操作,以便我可以将仪表板页面上不相关的所有三个表列为最新故事。

php laravel laravel-5
1个回答
2
投票

创建 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 可以给你一个想法。

© www.soinside.com 2019 - 2024. All rights reserved.