我有两种型号的Tour和Adventure。我想把旅行团和冒险活动按日期分组。并以如下方式展示:
七月十七日
旅游1旅游2旅游3冒险1冒险2冒险3
七月十六日
旅游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)');
}冒险模型的迁移和旅游是一样的。这两种模式之间没有共同的关系。
发布于 2019-07-17 11:05:05
我认为您正在寻找合并两个集合Laravel.com/docs/5.8/collections#方法-合并的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发布于 2019-07-17 10:14:45
像这样的事情应该能起作用:
Tour::join('adventures', DB::raw('date(adventures.created_at)'), '=', DB::raw('date(tours.created_at)'))->get()当然,您仍然可以在运行->get()之前进行分组或排序,因为->get()执行了查询并使您的集合:)
https://stackoverflow.com/questions/57072992
复制相似问题