Laravel сгруппировать и считать разные значения (Polymorphi c) - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть таблица с именем «reportable» и я хочу отображать записи в таблице на веб-сайте. К сожалению, я не могу правильно выполнить запрос к базе данных, у меня нет большого опыта работы с таблицей One To Many (Polymorphi c).

таблица базы данных:

Schema::create('reportable', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('user_id')->unsigned()->nullable()->index();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');
            $table->integer('reason');
            $table->integer('reportable_id')->index();
            $table->string('reportable_type')->index();
            $table->text('notice')->nullable();
            $table->tinyInteger('status')->default(0)->index();
            $table->timestamps();
        });

In В таблице на веб-странице я хочу отображать только записи с одинаковыми reportable_id и reportable_type только один раз.

Кроме того, записи с одинаковыми reportable_id и reportable_type должны учитываться и отображаться как числовое значение.

Кроме того, записи в столбце 'причина' с одинаковыми reportable_id и reportable_type должны учитываться и отображаться с соответствующей записью и в виде числового значения.

1 Ответ

1 голос
/ 23 февраля 2020

, если вы хотите список:

    $query = Report::select(\DB::raw('reportable.reportable_id,reportable.reportable_type,SUM(reason) as reason_total'))  // Or \DB::raw('reportable.*,SUM(reason) as reason_total')
        ->groupBy('reportable_type')
        ->groupBy('reportable_id')
        ->get();

И если вы хотите иметь конкретную c строку, ваш запрос должен выглядеть следующим образом:

    $reportableId = 1; // $reportableId = Input::get('report_id'); // It can come from get parameters     http://localhost/reports?report_id= 1
    $reportableType = 'User'; 

    $query = Report::select(\DB::raw('reportable.reportable_id,reportable.reportable_type,SUM(reason) as reason_total'))  // Or \DB::raw('reportable.*,SUM(reason) as reason_total')
        ->groupBy('reportable_type')
        ->groupBy('reportable_id')
        ->get();


    if($reportableId)
        $query =  $query->where('reportable_id' , $reportableId );

    if($reportableType)
        $query =  $query->where('reportable_type' , $reportableType );

    return $query;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...