namespace App\Repository;
trait QueryTrait
{
public $query;
public function __clone()
{
$this->query = clone $this->query;
}
...
}
namespace App\Repository\Al;
use App\Models\Al\CourseSheet;
use App\Repository\QueryTrait;
class CourseSheetRepository
{
use QueryTrait;
private $model_query;
public function __construct()
{
$this->model_query = CourseSheet::query();
$this->setQuery($this->model_query);
}
public function queryCourseId(int $courseId)
{
$this->query->where('course_id', $courseId);
return $this;
}
}
clone
$courseSheetRep = app(CourseSheetRepository::class);
$courseSheetRep->queryCourseId($courseId);
// select * from course_id = ~ and ass_id = ~ limit 1;
$map = (clone $courseSheetRep)->queryAssessmentId($assessmentId)->first();
if (collect($map)->isEmpty()) {
// select count(1) from course_id = ~ ;
$count = (clone $courseSheetRep)->count();
...