Laravel:查询两个`articles`表,`id`冲突

时间:2017-09-03 08:08:21

标签: mysql laravel

例如,
有两个表,articles-1articles-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'));
}

1 个答案:

答案 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'));
        }
    }


}
相关问题