2016-10-05 10 views
0

私は2つのテーブルcitiestownsを持っています。2つのテーブルを照会し、created_atに基づいて結果を結合する

私が行う必要があるのは、これらの2つのテーブルをクエリし、その結果を組み合わせて、created_at列で並べ替えることです。さらに、私はそれを合計25の結果に制限する必要があります。私はまた、どのレコードがcitiesに属し、townsに属しているのかを私の見解に表示する際に区別する必要があります。

これは私が現時点で持っているものですが、私はそれを行うための正しい方法だとは思わない:

$cities = City::orderBy('created_at', 'DESC') 
    ->get(); 

$towns = Town::orderBy('created_at', 'DESC') 
    ->get(); 

$results = array_merge($cities->toArray(), $towns->toArray()); 
usort($results, function($a, $b) 
{ 
    return $a['created_at'] < $b['created_at']; 
}); 

return $results; 

これに伴う問題は、それが合計にそれを制限しないことです25結果。私はそれが最善の方法であるかどうかも分かりません。

私が解決しなければならない第2の問題は、私の見解で結果を表示することです。どのレコードがどのテーブルに属しているかを区別する方法が必要です。

@foreach ($results as $result) 
    @if (CHECK IF RESULT IS CITY) 

    @else (CHECK IF RESULT IS TOWN) 

    @endif 
@endforeach 

どのように私はどのテーブルに属しているレコードを確認することができます。私の見解では

、私のようなものがありますか?

+0

市と町との間に関連はありますか? – prateekkathal

+0

唯一の関係は、町が大都市の近くにある場合、または大都市の中にある場合、 'towns'表に' city_id'列があるということです。 –

答えて

0

が、その後2つの収集結果をマージdescendiglyその後、25

$cities = City::orderBy('created_at', 'DESC') 
    ->get(); 

$towns = Town::orderBy('created_at', 'DESC') 
    ->get(); 
$merged = $cities->merge($towns); 

を取る日付で注文して最終的にしたい場合は25

$results = $sorted->take(25); 

を取り、彼らに

$sorted = $collection->sortByDesc('created_at');

を並べ替えますどのモデルがオブジェクトであるかを知るためにネイティブを使用できますis_afunction

@foreach ($results as $result) 
    @if (is_a($result, \App\City::class)) 

    @else (is_a($result, \App\Town::class)) 

    @endif 
@endforeach 
0

私はそれをテストしていない、しかし、私はそれはあなたが単にそれをこの方法で行うことができますビューで今すぐ

$cities = City::orderBy('id', 'desc')->limit(25)->get(); 

$towns = Town::orderBy('id', 'desc')->limit(25)->get(); 

$citiesAndTowns = $cities->merge($towns)->sortByDesc('created_at')->take(25); 

// or use sortBy('created_at') for ascending.... 

はず感じるので、これは仕事をしたりしません場合、私はわかりませんよ。 ..

@foreach($citiesAndTowns as $cityOrTown) 
    @if(get_class($cityOrTown) == 'App\City') 

    @else 

    @endif 
@endforeach 

あるいは物事のその汚いやり方をスキップする、あなたが$citiesAndTowns->toArray()を行うと、このようなビューに変更を加えることができます...

@foreach($citiesAndTowns as $cityOrTown) 
    // Since `city_id` will never be a part of city table and even if 
    // it is null in Town, it will still be set.... 
    @if(isset($cityOrTown['city_id'])) 

    @else 

    @endif 
@endforeach 
関連する問題