例如,
有两个表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
s,我该怎么办?
更新:
如何编写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'));
}
首先,您不应该拥有诸如Article1和Artices2之类的模型。为模型和表名使用一些上下文特定的名称。现在,如果我们有两种型号,例如,说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'));
}
}
}