MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/www/ezwork/app/Models/DocumentPart.php
<?php

/**
 * DocumentPartModel class file
 *
 * PHP Version 7.2
 *
 * @category Model
 * @package  Ez
 * @author   Imenso Software <admin@imensosoftware.com>
 * @license  http://imensosoftware/license.php GNU Public License
 * @link     http://imensosoftware.com/recipes
 */

namespace App\Models;

use DB ;
use Illuminate\Database\Eloquent\Model;

/**
 * DocumentPartModel class
 *
 * The class manage Document Part related queries
 *
 * @category DocumentPartModel
 * @package  Ez
 * @author   Imenso Software <admin@imensosoftware.com>
 * @license  http://imensosoftware/license.php GNU Public License
 * @link     http://imensosoftware.com/recipes
 */

class DocumentPart extends Model
{
    public $table = "document_parts";
    public $fillable = ['document_id','part_id','part_no'];
    public $timestamps = false ;

    /**
     * DocumentServices function gets the document_services that belong to the document_part
     * and return it.
     *
     * @param  void
     * @return \App\Models\DocumentPart
     */
    public function documentServices()
    {
        return $this->belongsToMany(
            'App\Models\DocumentPart',
            'document_part_services',
            'document_part_id',
            'document_service_id'
        );
    }

    /**
     * GetDocumentParts function gets the list of parts of specified document and
     * return the document part list .
     *
     * @param  array request
     * @return \App\Models\DocumentPart
     */
    public static function getDocumentParts($request)
    {
        $documentParts = DocumentPart::
        leftJoin('document_segments', 'document_segments.document_part_id', '=', 'document_parts.id')
            
            ->select(
                "document_parts.*",
                DB::raw("CONCAT('Part ', document_parts.part_id) AS part_name"),
                //DB::raw("CONCAT('Part ', (@cnt := if(@cnt IS NULL, 0,  @cnt) + 1)) AS part_name"),
                DB::raw("SUM(IF(document_segments.is_skip=0, document_segments.no_of_words , 0) ) AS word_counts")
            );

        if ($request->document_id) {
            $documentParts = $documentParts->where('document_parts.document_id', $request->document_id);
        }
        $documentParts = $documentParts->orderBy('document_parts.id', 'ASC')->groupBy('document_parts.id')
            ->get();
        return $documentParts;
    }
}