我有两个模型Tour
和Adventure
。我想按日期对旅行和冒险进行分组。并显示如下:
7月17日
游览1游览2游览3 冒险1冒险2冒险3
7月16日
游览1游览2游览3 冒险1冒险2冒险3
我知道如何对单个模型进行分组。它是这样的:
Tour::orderBy('created_at', 'desc')->take(20)->get()->groupBy(function($item)
{
return $item->created_at->format('d-M-y');
});
如何合并两个模型并将它们显示为单个日期?当前代码天出现在不同的集合中。
编辑:包括表迁移。
public function up()
{
Schema::create('tours', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 125);
$table->string('slug')->index();
$table->text('description')->nullable();
$table->string('duration')->nullable();
$table->string('url')->nullable();
$table->boolean('ended')->default(false)->index();
$table->timestamps();
});
DB::statement('ALTER TABLE tours ADD FULLTEXT search(name)');
}
冒险模型的迁移与游览相同。这两个模型之间没有共享关系。
答案 0 :(得分:1)
我认为您正在寻找用于合并两个集合laravel.com/docs/5.8/collections#method-merge
的merge()方法 //Get all Tours
$tours= Tour::orderBy('created_at', 'desc')->get();
//Get all adventures
$adventures= Adventure::orderBy('created_at', 'desc')->get();
//Merge both collection into 1 single collection and group according the date
$dates= $tours->merge($adventures)->groupBy(function($item) {
return $item->created_at->format('d-M-y');
});
return view('someView', compact('dates'));
然后您可以在日期内循环
@foreach($dates as $date => $activity)
<h2>{{$date}}</h2>
<li>
{{$activity}}
</li>
@endforeach
答案 1 :(得分:0)
类似这样的事情应该可以解决:
Tour::join('adventures', DB::raw('date(adventures.created_at)'), '=', DB::raw('date(tours.created_at)'))->get()
当然,在运行->get()
之前,您仍然可以选择分组或排序等选项,因为->get()
执行了查询并进行了收集:)