2017-09-03 62 views
0

例如,
有兩個表,articles-1articles-2
它們具有相同的結構,每個表的id1Laravel:查詢兩個`articles`表,`id`衝突

我想查詢兩個表的文章,並在一個視圖中顯示它們。

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')); 
} 
+0

如果您在兩張表中都有相同的列名, e查詢生成器來獲取表記錄 –

+0

@Sagar Gautam如何查詢兩個表?根據文檔,查詢一個表是這樣的:'$ users = DB :: table('users') - > get();'https://laravel.com/docs/5.5/queries#retrieving-results – zwl1619

+0

如果你有相同的列,那麼你可以合併這兩個查詢,最後執行查詢來獲取數據。 –

回答

2

首先你不應該有模型,如第一條和第二條。爲模型和表名使用一些特定於上下文的名稱。 現在,如果我們有兩個模型假設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')); 
     } 
    } 


} 
+0

謝謝!如何編寫'show'方法?看到我的更新。 – zwl1619

+0

檢查更新的答案 –