Description
Describe the bug
ErrorException: Undefined index: operator
appears when it tries to parse select
queries,
presumably because of the new type
s added in 5.7.14 (InRaw
, NotInRaw
, IntegerInRaw
, IntegerNotInRaw
) in the name of improving eager-loading performance.
Ref: laravel/framework@v5.7.13...v5.7.14
Related Laravel PRs from changelog: (#26434, #26453, 3992140, #26471, a3738cf, #26531)
Eloquent Query
return WeekendAssignments::select('weekend_assignments.*', 'weekend_roles.RoleName', 'weekend_roles.sortorder')
->join('weekend_roles', 'weekend_assignments.roleID', '=', 'weekend_roles.id')
->where('weekendID', $this->id)
->where('confirmed', true)
->withoutGlobalScope('visibleWeekendsOnly')
->orderBy('weekend_roles.sortorder', 'asc')
->orderBy('weekend_roles.id', 'asc')
->get();
which generates:
select "weekend_assignments".*, "weekend_roles"."RoleName", "weekend_roles"."sortorder"
from "weekend_assignments"
inner join "weekend_roles" on "weekend_assignments"."roleID" = "weekend_roles"."id"
where "weekendID" = ? and "confirmed" = ?
order by "weekend_roles"."sortorder" asc, "weekend_roles"."id" asc
where WeekendAssignments
is a basic Eloquent model with the following:
class WeekendAssignments extends Model
{
protected $with = 'role';
public function getRouteKeyName()
{
return 'weekendID';
}
protected static function boot()
{
parent::boot();
static::addGlobalScope('visibleWeekendsOnly', function (Builder $builder) {
$builder->whereIn(
'weekendID',
Weekend::where('visibility_flag', '>=', WeekendVisibleTo::Community)->get()->pluck('id')
);
});
}
//
public function role()
{
return $this->belongsTo(WeekendRoles::class, 'roleID');
}
//
}
and WeekendRoles (note: "Roles" here refers to "a position held on a team, such as 'food server'" and not related to app permissions):
class WeekendRoles extends Model
{
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
protected $with = 'section';
protected static function boot()
{
parent::boot();
static::addGlobalScope('rolesBySortOrder', function (Builder $query) {
$query->orderBy('sortorder', 'asc');
});
}
//
public function section()
{
// Section is a simple basic Eloquent model
return $this->belongsTo(Section::class, 'section_id');
}
}
Stack Trace
/SITE/vendor/genealabs/laravel-model-caching/src/CacheKey.php:102
/SITE/vendor/genealabs/laravel-model-caching/src/CacheKey.php:262
/SITE/vendor/genealabs/laravel-model-caching/src/CacheKey.php:167
/SITE/vendor/laravel/framework/src/Illuminate/Support/Collection.php:1388
/SITE/vendor/genealabs/laravel-model-caching/src/CacheKey.php:170
/SITE/vendor/genealabs/laravel-model-caching/src/CacheKey.php:36
/SITE/vendor/genealabs/laravel-model-caching/src/Traits/Caching.php:76
/SITE/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:86
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php:155
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php:144
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:564
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:533
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:501
/SITE/app/Weekend.php:405
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:444
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:344
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:317
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1513
/SITE/app/Weekend.php:416
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:444
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:344
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:317
/SITE/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1513
/SITE/app/Http/Controllers/WeekendController.php:94
/SITE/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
/SITE/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45
/SITE/vendor/laravel/framework/src/Illuminate/Routing/Route.php:212
... (usual bootstrap stuff)
/SITE/tests/Feature/WeekendStatusTest.php:135
Environment
- PHP: 7.2.12
- Laravel: 5.7.14+
- Model Caching: 0.3.3
Additional context
In feature tests, had to add withoutExceptionHandling()
to see the Exceptions being thrown.