diff --git a/src/Models/Projection.php b/src/Models/Projection.php index 0b1a990..5b9c728 100644 --- a/src/Models/Projection.php +++ b/src/Models/Projection.php @@ -87,7 +87,7 @@ public function scopeName(Builder $query, string $projectorName): Builder { $this->projectionName = $projectorName; - return $query->where('projection_name', $projectorName); + return $query->whereRaw('projection_name = ?', [$projectorName]); } /** diff --git a/src/Models/Scopes/ProjectionScope.php b/src/Models/Scopes/ProjectionScope.php index 27a6e76..a416f64 100644 --- a/src/Models/Scopes/ProjectionScope.php +++ b/src/Models/Scopes/ProjectionScope.php @@ -15,7 +15,7 @@ class ProjectionScope implements Scope public function apply(Builder $builder, Model $model): void { if (! $this->isAbstractProjection($model)) { - $builder->where('projection_name', $model::class); + $builder->whereRaw('projection_name = ?', [$model::class]); } } diff --git a/src/Models/Traits/Projectable.php b/src/Models/Traits/Projectable.php index 7bf1e3e..4de1beb 100644 --- a/src/Models/Traits/Projectable.php +++ b/src/Models/Traits/Projectable.php @@ -52,7 +52,7 @@ public function projections( $query = $this->morphToMany(Projection::class, 'projectable', 'time_series_projectables'); if (isset($projectionName)) { - $query->where('projection_name', $projectionName); + $query->whereRaw('projection_name = ?', [$projectionName]); } if (isset($periods) && is_string($periods)) { diff --git a/src/Projector.php b/src/Projector.php index 362be9c..0462354 100644 --- a/src/Projector.php +++ b/src/Projector.php @@ -93,12 +93,13 @@ private function parsePeriod(string $period): void */ private function findGlobalProjection(): Projection|null { - return Projection::firstWhere([ - ['projection_name', $this->projectionName], - ['key', $this->hasKey() ? $this->key() : null], - ['period', '*'], - ['start_date', null], - ]); + return Projection::whereRaw('projection_name = ?', [$this->projectionName]) + ->where([ + ['key', $this->hasKey() ? $this->key() : null], + ['period', '*'], + ['start_date', null], + ]) + ->first(); } /** @@ -106,12 +107,14 @@ private function findGlobalProjection(): Projection|null */ private function findProjection(string $period): Projection|null { - return Projection::firstWhere([ - ['projection_name', $this->projectionName], - ['key', $this->hasKey() ? $this->key() : null], - ['period', $period], - ['start_date', app(TimeSeries::class)->resolveFloorDate($this->projectedModel->{$this->dateColumn}, $period)], - ]); + return Projection::whereRaw('projection_name = ?', [$this->projectionName]) + ->where([ + ['key', $this->hasKey() ? $this->key() : null], + ['period', $period], + ['start_date', app(TimeSeries::class)->resolveFloorDate($this->projectedModel->{$this->dateColumn}, $period), + ], + ]) + ->first(); } /** diff --git a/tests/Collections/ProjectionCollectionTest.php b/tests/Collections/ProjectionCollectionTest.php index 42046de..b320541 100644 --- a/tests/Collections/ProjectionCollectionTest.php +++ b/tests/Collections/ProjectionCollectionTest.php @@ -223,7 +223,7 @@ function (Projection $lastProjection) { /** @test */ public function it_is_formatted_to_a_time_series() { - Log::factory()->create(['created_at' => today()]); + Log::factory()->create(['created_at' => today(), 'updated_at' => today()]); /** @var ProjectionCollection $collection */ $collection = Projection::all();