mysql - 如何使用 `sql/mysql` 从公共(public)列下的 `groupby` 获取嵌套数组,而不使用 foreach 来构造数据?

标签 mysql laravel laravel-5 group-by eloquent

假设表 tracker 包含此columns(id,section,user_id,message),另一个是 user 表,其中包含 user data 和 user_id 是表 tracker 中的外键,因此我使用 joinuser 获取名称表,我正在使用 laravel。

响应是这样的:-

{'id'=1,'name'='pavan','section'='marketing','message'='something'}

所需的结构是 user_id 下的嵌套数组,如下所示:-

{
//user_id 1:
  [name,section,message],
 2:
  [name,section,message]
}

如何使用 MySQL 查询获取此信息?

//用户模型

 <?php

 use Illuminate\Support\Facades\Schema;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;

 class CreateUsersTable extends Migration
 {
 /**
 * Run the migrations.
 *
 * @return void
 */
 public function up()
 {
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
 }

 /**
 * Reverse the migrations.
 *
 * @return void
 */
 public function down()
 {
    Schema::dropIfExists('users');
 }
 }

//跟踪器模型

 public function up()
{
    Schema::create('trackers', function (Blueprint $table) {
        $table->increments('id');
        $table->enum('section',['Marketing','Sales','Customer','Trainer','Operations']);
        $table->string('subject')->nullable();
        $table->longText('content');
        $table->enum('status',['processing','resolved']);
        $table->date('date');
        $table->unsignedInteger('user_id');
        $table->timestamps();
        $table->foreign('user_id')->references('id')->on('users');

    });
}

//跟踪器模型中获取数据方法

public function getdata(){
        return \DB::table('trackers')
        ->join('users','users.id','=','trackers.user_id')
        ->select('trackers.user_id','users.name',
          'trackers.created_at','trackers.id','date',
          'trackers.status','trackers.section','trackers.content')
          ->orderBy('created_at','DESC')->get();
        }

//查询

 $dat=new Tracker;
  $data=$dat->getdata()->where('date',Carbon::today()->
  toDateString())->where('status','processing');

最佳答案

 $dat=new Tracker;
  $data=$dat->getdata()->where('date',Carbon::today()->
  toDateString())->where('status','processing')->get();

get() 将在获取您可以使用的集合后返回集合

您可以使用这样的数据

$dat->groupBy('user_id');

这将返回您期望的数据。

您可以获得有关collection->groupby()的更多信息

https://laravel.com/docs/5.6/collections#method-groupby

关于mysql - 如何使用 `sql/mysql` 从公共(public)列下的 `groupby` 获取嵌套数组,而不使用 foreach 来构造数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49974823/

相关文章:

php - Laravel Eloquent 多对多如何

php - 如果 $model->save() 失败,则继续代码

php - 更新后获取以前的值 - MySql

php - 转义 mysql 搜索字符串 php

php - 将 blade.php 文件链接到 CSS laravel 5.x

php - Laravel Eloquent 关系分页

laravel - “Where like”子句使用 2 列的串联值与 Eloquent

javascript - 追加到同一个div

mysql - 我在 mysql 中遇到错误,例如命令 ="SELECT * FROM subjects WHERE Course LIKE (' %'+ ? + ' %')

MySql 计算行数