例如,
有两个表,articles-1
和articles-2
,
它们具有相同的结构,每个表的id
来自1
。
我想查询两个表的文章并在一个视图中显示它们。
ArticlesController.php
public function index()
{
$articles1=Article1::all();
$articles2=Article2::all();
//$allArticles=; //How to merge $articles1 and $articles2?
return view('index', compact('allArticles'));
}
index.blade.php
<ul>
@foreach ($allArticles as $article)
<li><a href="articles/{{$article->id}}">{{ $article->title }}</a></li>
<li>{{ $article->updated_at}}</li>
@endforeach
</ul>
问题:
1,在ArticlesController
,如何合并$articles1
和$articles2
?
2,在视图中,每个项目都有一个指向show
页面(详细信息页面)的链接,但它们可能具有相同的id
,我该怎么办?
更新
如何编写show
方法的查询?
ArticlesController.php
public function show($slug)
{
//query twice?
$newArticle = NewArticle::findOrFail($slug);
$oldArticle = OldArticle::findOrFail($slug);
//How to write next?
return view('show', compact('article'));
}
答案 0 :(得分:2)
首先,你不应该拥有像Article1和Article2这样的模型。为模型和表名称使用某些特定于上下文的名称。 现在,如果我们有两个模型,让我们说Oldarticle和Newarticle以及表格oldarticles和newarticles那么
public function index()
{
$oldArticlesArr = Oldarticle::all()->toArray();
$newArticlesArr = Newarticle::all()->toArray();
$allArticles = array_merge($oldArticlesArr, $newArticlesArr);
return view('index', compact('allArticles'));
}
在newarticles和oldarticles表中使用article_slug列,并按如下所示创建链接
<ul>
@foreach ($allArticles as $article)
<li><a href="articles/{{$article['article_slug']}}">{{ $article['title'] }}</a></li>
<li>{{ $article['updated_at']}}</li>
@endforeach
</ul>
要显示任一表中的单篇文章,请在ArticleController中编写以下方法
public function show($article_slug)
{
//search in oldarticles table
$oldArticle = Oldarticle::where('article_slug',$article_slug)->first();
if ($oldArticle) {
//if found return that as article
$article = $oldArticle;
return view('show', compact('article'));
} else {
//search in newarticles table if found return that as article
$article = Newarticle::where('article_slug',$article_slug)->first();
if ($article) {
return view('show', compact('article'));
}
}
}