【发布时间】:2019-09-10 17:04:26
【问题描述】:
我很难解决这个分组问题。我有一个主表,其中包含 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");
}
【问题讨论】:
-
你是用名字连接两个表有没有主键,请提供完整的表结构。
-
我更新了问题。并提供带有模型的表格结构。 @CHARITRASHRESTHA 请看一下。
-
您不能使用该名称来连接两个表,因为它们没有唯一值。解释你为什么对名字进行分组。两个Mark是同一个人吗?如果是,那么只需通过主键链接表。无需使用 group by
-
是的。但每个 Mark 持有不同的计划,在计划表中。我想在这里做什么。将标记分组,并将计划分组...@CHARITRASHRESTHA
-
作为您的问题,如果每个名称都有不同的计划,您为什么要合并它。如果您想不惜一切代价实现这一目标,您可以在主表中再添加一列,如 name1 计划等