Skip to content

Spatie's QueryBuilder support #2409

Closed
@leon0399

Description

@leon0399
  • Laravel-mongodb Version: 3.9.9
  • PHP Version: 8.1.0
  • Database Driver & Version:

Description:

Queries, populated with Spaties's query builder are not correct.
Spatie's package adds table prefix for WHERE filters: select * from table 'example' ... where 'example'.'column' = ?
MongoDB driver can not execute such queries, as it interprets this query as deep object comparison ({ "example": { "column": "value" } }) instead of { "column": "value" }

Adding table (or collection) prefix to query is correct behavior and part of Model function: ``

Temporal fix is adding this to your model:

    public function qualifyColumn($column)
    {
        return Str::after($column, $this->getTable() . '.');
    }

Steps to reproduce

  1. composer require spatie/query-builder
  2. Create MongoDB model
  3.  QueryBuilder::for(MongoModel::class)
       ->allowedFiilter([
         AllowedFilter::exact('column'),
       ])
       ->dd();
  4. /some-route?filter[column]=value

Expected behaviour

{
  "$and": {
    "column": "value",
  }
}

Actual behaviour

{
  "$and": {
    "mongo-model.column": "value",
  }
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions