我很难解决这个分组问题。我有一个主表,其中包含name
列中的名称。还有另一个表通过 belongsTo 关系连接到主表,并包含每个名称的计划。
问题是,在主表中某些名称重复了几次。结构如下。
| name |
--------------------
| Mark
| Mark
| Jack
| Alistair
| Oliver
| Jack
如果值(名称)相同,我想对行进行分组。同时尝试避免丢失连接的表数据。因为每个名称在另一个表中都有自己的计划。
Master::select('name')
->groupBy('name')
->get();
如果我执行上述操作,则将名称分组。但是这次当然会丢失连接表的数据。
无论如何,我想要在这里实现什么。
这是表之间连接的表结构和模型。
主表
Schema::create('masters', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->timestamps();
});
计划表
Schema::create('plans', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('master_id');
$table->string('website');
$table->string('url');
$table->string('plan_name');
$table->timestamps();
});
主模型
public $with = ["plan];
public function plan()
{
return $this->hasMany("App\Plan");
}
计划模型
public function master()
{
return $this->belongsTo("App\Master");
}
答案 0 :(得分:0)
Group by不允许我们选择所有列,因此您可以加入和使用order by。
DB::table('masters as m')->select(m.*,p.*)
->join('plans as p', 'p.master_id', '=','m.id')
->orderBy('m.name', 'asc')
->orderBy('p.id', 'asc')