2017-09-03 5 views
0

、彼らは同じ構造を持つ2つのテーブル、articles-1articles-2

あり、各テーブルのid1からです。Laravel:たとえば、クエリ2 `articles`テーブル、` id`紛争

私は2つのテーブルの記事を照会し、それらを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

両方のテーブルに同じ列名がある場合は、両方のテーブルのレコードを取得するためのクエリビルダ –

+0

@Sagar Gautam両方のテーブルをクエリする方法は?ドキュメントによると、1つのテーブルのクエリは次のようになります: '$ users = DB :: table( 'users') - > get();' https://laravel.com/docs/5.5/queries#retrieving-results – zwl1619

+0

同じ列がある場合は、2つのクエリを結合し、最後にクエリを実行してデータを取得できます。 –

答えて

2

まず、あなたは1条とArticle2のようなモデルを持つべきではありません。モデル名と表名には、コンテキスト固有の名前を使用します。 は、今、私たちが持っている場合は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

更新された回答を確認する –

関連する問題