Skip to content

Commit 6415422

Browse files
committed
Embedded relations now return regular Eloquent collections
1 parent 236d7c5 commit 6415422

File tree

5 files changed

+16
-306
lines changed

5 files changed

+16
-306
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ class User extends Eloquent {
9494
}
9595
```
9696

97+
Embedded relations now return an `Illuminate\Database\Eloquent\Collection` rather than a custom Collection class. If you were using one of the special methods that were available, convert them to Collection operations.
98+
9799
Configuration
98100
-------------
99101

@@ -558,6 +560,8 @@ Supported relations are:
558560
- hasMany
559561
- belongsTo
560562
- belongsToMany
563+
- embedsOne
564+
- embedsMany
561565

562566
Example:
563567

@@ -611,6 +615,8 @@ Other relations are not yet supported, but may be added in the future. Read more
611615

612616
If you want to embed models, rather than referencing them, you can use the `embedsMany` relation. This relation is similar to the `hasMany` relation, but embeds the models inside the parent object.
613617

618+
**REMEMBER**: these relations return Eloquent collections, they don't return query builder objects!
619+
614620
```php
615621
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
616622

src/Jenssegers/Mongodb/Eloquent/Collection.php

Lines changed: 0 additions & 243 deletions
This file was deleted.

src/Jenssegers/Mongodb/Relations/EmbedsMany.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class EmbedsMany extends EmbedsOneOrMany
1010
/**
1111
* Get the results of the relationship.
1212
*
13-
* @return \Jenssegers\Mongodb\Eloquent\Collection
13+
* @return \Illuminate\Database\Eloquent\Collection
1414
*/
1515
public function getResults()
1616
{
@@ -319,8 +319,7 @@ protected function setEmbedded($models)
319319
*/
320320
public function __call($method, $parameters)
321321
{
322-
// Collection methods
323-
if (method_exists('Jenssegers\Mongodb\Eloquent\Collection', $method)) {
322+
if (method_exists('Illuminate\Database\Eloquent\Collection', $method)) {
324323
return call_user_func_array([$this->getResults(), $method], $parameters);
325324
}
326325

src/Jenssegers/Mongodb/Relations/EmbedsOneOrMany.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
<?php namespace Jenssegers\Mongodb\Relations;
22

33
use Illuminate\Database\Eloquent\Builder;
4-
use Illuminate\Database\Eloquent\Collection as BaseCollection;
4+
use Illuminate\Database\Eloquent\Collection;
55
use Illuminate\Database\Eloquent\Model;
66
use Illuminate\Database\Eloquent\Relations\Relation;
7-
use Jenssegers\Mongodb\Eloquent\Collection;
87

98
abstract class EmbedsOneOrMany extends Relation
109
{
@@ -101,7 +100,7 @@ public function initRelation(array $models, $relation)
101100
* @param string $relation
102101
* @return array
103102
*/
104-
public function match(array $models, BaseCollection $results, $relation)
103+
public function match(array $models, Collection $results, $relation)
105104
{
106105
foreach ($models as $model) {
107106
$results = $model->$relation()->getResults();
@@ -117,7 +116,7 @@ public function match(array $models, BaseCollection $results, $relation)
117116
/**
118117
* Shorthand to get the results of the relationship.
119118
*
120-
* @return \Jenssegers\Mongodb\Eloquent\Collection
119+
* @return \Illuminate\Database\Eloquent\Collection
121120
*/
122121
public function get()
123122
{

tests/EmbeddedRelationsTest.php

Lines changed: 5 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -424,70 +424,19 @@ public function testEmbedsManyCollectionMethods()
424424

425425
$this->assertEquals(['Paris', 'Bruges', 'Brussels', 'Ghent'], $user->addresses()->lists('city')->all());
426426
$this->assertEquals(['Bruges', 'Brussels', 'Ghent', 'Paris'], $user->addresses()->sortBy('city')->lists('city')->all());
427-
$this->assertEquals(['Bruges', 'Brussels', 'Ghent', 'Paris'], $user->addresses()->orderBy('city')->lists('city')->all());
428-
$this->assertEquals(['Paris', 'Ghent', 'Brussels', 'Bruges'], $user->addresses()->orderBy('city', 'desc')->lists('city')->all());
429-
430427
$this->assertEquals([], $user->addresses()->where('city', 'New York')->lists('city')->all());
431428
$this->assertEquals(['Bruges', 'Brussels', 'Ghent'], $user->addresses()->where('country', 'Belgium')->lists('city')->all());
432-
$this->assertEquals(['Ghent', 'Brussels', 'Bruges'], $user->addresses()->where('country', 'Belgium')->orderBy('city', 'desc')->lists('city')->all());
429+
$this->assertEquals(['Bruges', 'Brussels', 'Ghent'], $user->addresses()->where('country', 'Belgium')->sortBy('city')->lists('city')->all());
433430

434-
$results = $user->addresses->get(0);
431+
$results = $user->addresses->first();
435432
$this->assertInstanceOf('Address', $results);
436433

437-
$results = $user->addresses()->where('country', 'Belgium')->get();
438-
$this->assertInstanceOf('Jenssegers\Mongodb\Eloquent\Collection', $results);
439-
$this->assertEquals(3, $results->count());
440-
441-
$results = $user->addresses()->where('country', '!=', 'Belgium')->get();
442-
$this->assertEquals(1, $results->count());
443-
444-
$results = $user->addresses()->where('visited', '>', 4)->get();
445-
$this->assertEquals(2, $results->count());
446-
447-
$results = $user->addresses()->where('visited', '<', 7)->get();
448-
$this->assertEquals(2, $results->count());
449-
450-
$results = $user->addresses()->where('visited', '<=', 7)->get();
451-
$this->assertEquals(3, $results->count());
452-
453-
$results = $user->addresses()->where('visited', '>=', 7)->get();
454-
$this->assertEquals(2, $results->count());
455-
456-
$results = $user->addresses()->where('visited', 'between', [4, 7])->get();
457-
$this->assertEquals(2, $results->count());
458-
459-
$results = $user->addresses()->whereBetween('visited', [4, 7])->get();
460-
$this->assertEquals(2, $results->count());
461-
462-
$results = $user->addresses()->whereNotBetween('visited', [4, 7])->get();
463-
$this->assertEquals(2, $results->count());
464-
465-
$results = $user->addresses()->whereIn('visited', [7, 13])->get();
466-
$this->assertEquals(2, $results->count());
467-
468-
$results = $user->addresses()->whereNotIn('visited', [7])->get();
469-
$this->assertEquals(3, $results->count());
470-
471-
$results = $user->addresses()->whereNull('something')->get();
472-
$this->assertEquals(4, $results->count());
473-
474-
$results = $user->addresses()->whereNotNull('visited')->get();
475-
$this->assertEquals(4, $results->count());
476-
477-
$results = $user->addresses()->offset(1)->get();
434+
$results = $user->addresses()->where('country', 'Belgium');
435+
$this->assertInstanceOf('Illuminate\Database\Eloquent\Collection', $results);
478436
$this->assertEquals(3, $results->count());
479437

480-
$results = $user->addresses()->skip(1)->get();
481-
$this->assertEquals(3, $results->count());
482-
483-
$results = $user->addresses()->limit(2)->get();
438+
$results = $user->addresses()->whereIn('visited', [7, 13]);
484439
$this->assertEquals(2, $results->count());
485-
486-
$result = $user->addresses()->latest()->first();
487-
$this->assertEquals('Ghent', $result->city);
488-
489-
$result = $user->addresses()->oldest()->first();
490-
$this->assertEquals('Bruges', $result->city);
491440
}
492441

493442
public function testEmbedsOne()

0 commit comments

Comments
 (0)