将同一列中具有相同值的行分组

时间:2019-09-10 07:56:01

标签: laravel eloquent

我很难解决这个分组问题。我有一个主表,其中包含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");
}

1 个答案:

答案 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')