-
Notifications
You must be signed in to change notification settings - Fork 0
Changes from 5 commits
4ec7a5f
40ee389
9ffc492
4cc05b3
5695e38
0e018b1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8,6 +8,7 @@ | |
| use Illuminate\Database\Query\Builder as BaseBuilder; | ||
| use Illuminate\Database\Query\Expression; | ||
| use Illuminate\Support\Arr; | ||
| use Illuminate\Support\Carbon; | ||
| use Illuminate\Support\Collection; | ||
| use Illuminate\Support\LazyCollection; | ||
| use Illuminate\Support\Str; | ||
|
|
@@ -116,6 +117,7 @@ class Builder extends BaseBuilder | |
| * @var array | ||
| */ | ||
| protected $conversion = [ | ||
| '=' => 'eq', | ||
| '!=' => 'ne', | ||
| '<>' => 'ne', | ||
| '<' => 'lt', | ||
|
|
@@ -1084,7 +1086,7 @@ protected function compileWhereBasic(array $where): array | |
| $operator = $operator === 'regex' ? '=' : 'not'; | ||
| } | ||
|
|
||
| if (! isset($operator) || $operator == '=') { | ||
| if (! isset($operator) || $operator === '=' || $operator === 'eq') { | ||
| $query = [$column => $value]; | ||
| } else { | ||
| $query = [$column => ['$'.$operator => $value]]; | ||
|
|
@@ -1189,12 +1191,41 @@ protected function compileWhereBetween(array $where): array | |
| */ | ||
| protected function compileWhereDate(array $where): array | ||
| { | ||
| extract($where); | ||
|
|
||
| $where['operator'] = $operator; | ||
| $where['value'] = $value; | ||
| $startOfDay = new UTCDateTime(Carbon::parse($where['value'])->startOfDay()); | ||
| $endOfDay = new UTCDateTime(Carbon::parse($where['value'])->endOfDay()); | ||
|
|
||
| return $this->compileWhereBasic($where); | ||
| return match($where['operator']) { | ||
| 'eq', '=' => [ | ||
| $where['column'] => [ | ||
| '$gte' => $startOfDay, | ||
| '$lte' => $endOfDay, | ||
| ], | ||
| ], | ||
| 'ne' => [ | ||
| '$or' => [ | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I tested this alternative, but got segfaults. 'ne' => ['$not' => [
$column => [
'$gte' => $startOfDay,
'$lte' => $endOfDay,
],
]],There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Segfaults in I'm trying to think about how this would trigger a segfault in PHP. The only thing I can think of is that If this is actually a |
||
| [ | ||
| $where['column'] => [ | ||
| '$lt' => $startOfDay, | ||
| ], | ||
| ], | ||
| [ | ||
| $where['column'] => [ | ||
| '$gt' => $endOfDay, | ||
| ], | ||
| ], | ||
| ], | ||
| ], | ||
| 'lt', 'gte' => [ | ||
| $where['column'] => [ | ||
| '$'.$where['operator'] => $startOfDay, | ||
| ], | ||
| ], | ||
| 'gt', 'lte' => [ | ||
| $where['column'] => [ | ||
| '$'.$where['operator'] => $endOfDay, | ||
| ], | ||
| ], | ||
| }; | ||
| } | ||
|
|
||
| /** | ||
|
|
@@ -1203,12 +1234,16 @@ protected function compileWhereDate(array $where): array | |
| */ | ||
| protected function compileWhereMonth(array $where): array | ||
| { | ||
| extract($where); | ||
|
|
||
| $where['operator'] = $operator; | ||
| $where['value'] = $value; | ||
|
|
||
| return $this->compileWhereBasic($where); | ||
| return [ | ||
| '$expr' => [ | ||
| '$'.$where['operator'] => [ | ||
| [ | ||
| '$month' => '$'.$where['column'], | ||
| ], | ||
| (int) $where['value'], | ||
| ], | ||
| ], | ||
| ]; | ||
| } | ||
|
|
||
| /** | ||
|
|
@@ -1217,12 +1252,16 @@ protected function compileWhereMonth(array $where): array | |
| */ | ||
| protected function compileWhereDay(array $where): array | ||
| { | ||
| extract($where); | ||
|
|
||
| $where['operator'] = $operator; | ||
| $where['value'] = $value; | ||
|
|
||
| return $this->compileWhereBasic($where); | ||
| return [ | ||
| '$expr' => [ | ||
| '$'.$where['operator'] => [ | ||
| [ | ||
| '$dayOfMonth' => '$'.$where['column'], | ||
| ], | ||
| (int) $where['value'], | ||
| ], | ||
| ], | ||
| ]; | ||
| } | ||
|
|
||
| /** | ||
|
|
@@ -1231,12 +1270,16 @@ protected function compileWhereDay(array $where): array | |
| */ | ||
| protected function compileWhereYear(array $where): array | ||
| { | ||
| extract($where); | ||
|
|
||
| $where['operator'] = $operator; | ||
| $where['value'] = $value; | ||
|
|
||
| return $this->compileWhereBasic($where); | ||
| return [ | ||
| '$expr' => [ | ||
| '$'.$where['operator'] => [ | ||
| [ | ||
| '$year' => '$'.$where['column'], | ||
| ], | ||
| (int) $where['value'], | ||
| ], | ||
| ], | ||
| ]; | ||
| } | ||
|
|
||
| /** | ||
|
|
@@ -1245,12 +1288,16 @@ protected function compileWhereYear(array $where): array | |
| */ | ||
| protected function compileWhereTime(array $where): array | ||
| { | ||
| extract($where); | ||
|
|
||
| $where['operator'] = $operator; | ||
| $where['value'] = $value; | ||
|
|
||
| return $this->compileWhereBasic($where); | ||
| return [ | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I noted the original author's comment in mongodb/laravel-mongodb#2376:
Does this address that concern? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, fixed. There is no dedicated operator, but this was possible using |
||
| '$expr' => [ | ||
| '$'.$where['operator'] => [ | ||
| [ | ||
| '$dateToString' => ['date' => '$'.$where['column'], 'format' => '%H:%M:%S'], | ||
| ], | ||
| $where['value'], | ||
| ], | ||
| ], | ||
| ]; | ||
| } | ||
|
|
||
| /** | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could result in a subtle behavioral change when using
MongoDB\BSON\Regexobjects. Quoting$eqdocs:There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
{ field: { eq: Regex } }is not supported ATM as it will always end to{ field: Regex }for matching the regex. I don't think storing Regex in database is common enough to fix it know. PHPORM-74