Skip to content

Commit 1c2d1fe

Browse files
authored
PHPORM-119 Fix integration with Spacie Query Builder - Don't qualify field names in document models (mongodb#2676)
1 parent 1b7b5e4 commit 1c2d1fe

File tree

4 files changed

+70
-1
lines changed

4 files changed

+70
-1
lines changed

composer.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"phpunit/phpunit": "^10.3",
3535
"orchestra/testbench": "^8.0",
3636
"mockery/mockery": "^1.4.4",
37-
"doctrine/coding-standard": "12.0.x-dev"
37+
"doctrine/coding-standard": "12.0.x-dev",
38+
"spatie/laravel-query-builder": "^5.6"
3839
},
3940
"replace": {
4041
"jenssegers/mongodb": "self.version"

src/Eloquent/Model.php

+6
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,12 @@ public function newEloquentBuilder($query)
577577
return new Builder($query);
578578
}
579579

580+
/** @inheritdoc */
581+
public function qualifyColumn($column)
582+
{
583+
return $column;
584+
}
585+
580586
/** @inheritdoc */
581587
protected function newBaseQueryBuilder()
582588
{

tests/ExternalPackageTest.php

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace MongoDB\Laravel\Tests;
6+
7+
use Illuminate\Http\Request;
8+
use MongoDB\Laravel\Tests\Models\User;
9+
use Spatie\QueryBuilder\AllowedFilter;
10+
use Spatie\QueryBuilder\AllowedSort;
11+
use Spatie\QueryBuilder\QueryBuilder;
12+
13+
/**
14+
* Test integration with external packages.
15+
*/
16+
class ExternalPackageTest extends TestCase
17+
{
18+
protected function tearDown(): void
19+
{
20+
parent::tearDown();
21+
22+
User::truncate();
23+
}
24+
25+
/**
26+
* Integration test with spatie/laravel-query-builder.
27+
*/
28+
public function testSpacieQueryBuilder(): void
29+
{
30+
User::insert([
31+
['name' => 'Jimmy Doe', 'birthday' => '2012-11-12', 'role' => 'user'],
32+
['name' => 'John Doe', 'birthday' => '1980-07-08', 'role' => 'admin'],
33+
['name' => 'Jane Doe', 'birthday' => '1983-09-10', 'role' => 'admin'],
34+
['name' => 'Jess Doe', 'birthday' => '2014-05-06', 'role' => 'user'],
35+
]);
36+
37+
$request = Request::create('/users', 'GET', ['filter' => ['role' => 'admin'], 'sort' => '-birthday']);
38+
$result = QueryBuilder::for(User::class, $request)
39+
->allowedFilters([
40+
AllowedFilter::exact('role'),
41+
])
42+
->allowedSorts([
43+
AllowedSort::field('birthday'),
44+
])
45+
->get();
46+
47+
$this->assertCount(2, $result);
48+
$this->assertSame('Jane Doe', $result[0]->name);
49+
}
50+
}

tests/ModelTest.php

+12
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use MongoDB\Laravel\Tests\Models\Item;
2626
use MongoDB\Laravel\Tests\Models\MemberStatus;
2727
use MongoDB\Laravel\Tests\Models\Soft;
28+
use MongoDB\Laravel\Tests\Models\SqlUser;
2829
use MongoDB\Laravel\Tests\Models\User;
2930

3031
use function abs;
@@ -58,6 +59,17 @@ public function testNewModel(): void
5859
$this->assertEquals('_id', $user->getKeyName());
5960
}
6061

62+
public function testQualifyColumn(): void
63+
{
64+
// Don't qualify field names in document models
65+
$user = new User();
66+
$this->assertEquals('name', $user->qualifyColumn('name'));
67+
68+
// Qualify column names in hybrid SQL models
69+
$sqlUser = new SqlUser();
70+
$this->assertEquals('users.name', $sqlUser->qualifyColumn('name'));
71+
}
72+
6173
public function testInsert(): void
6274
{
6375
$user = new User();

0 commit comments

Comments
 (0)