Browse Source

Sphinx Active Relation lazy load fixed.

tags/2.0.0-beta
Paul Klimov 11 years ago
parent
commit
b62b4eae2b
  1. 31
      extensions/yii/sphinx/ActiveRelation.php
  2. 1
      tests/unit/extensions/sphinx/ActiveRelationTest.php

31
extensions/yii/sphinx/ActiveRelation.php

@ -19,4 +19,35 @@ use yii\db\ActiveRelationTrait;
class ActiveRelation extends ActiveQuery implements ActiveRelationInterface class ActiveRelation extends ActiveQuery implements ActiveRelationInterface
{ {
use ActiveRelationTrait; use ActiveRelationTrait;
/**
* @inheritdoc
*/
public function createCommand($db = null)
{
if ($this->primaryModel !== null) {
// lazy loading
if ($this->via instanceof self) {
// via pivot index
$viaModels = $this->via->findPivotRows([$this->primaryModel]);
$this->filterByModels($viaModels);
} elseif (is_array($this->via)) {
// via relation
/** @var ActiveRelation $viaQuery */
list($viaName, $viaQuery) = $this->via;
if ($viaQuery->multiple) {
$viaModels = $viaQuery->all();
$this->primaryModel->populateRelation($viaName, $viaModels);
} else {
$model = $viaQuery->one();
$this->primaryModel->populateRelation($viaName, $model);
$viaModels = $model === null ? [] : [$model];
}
$this->filterByModels($viaModels);
} else {
$this->filterByModels([$this->primaryModel]);
}
}
return parent::createCommand($db);
}
} }

1
tests/unit/extensions/sphinx/ActiveRelationTest.php

@ -30,6 +30,7 @@ class ActiveRelationTest extends SphinxTestCase
$this->assertTrue($article->isRelationPopulated('index')); $this->assertTrue($article->isRelationPopulated('index'));
$this->assertTrue($index instanceof ArticleIndex); $this->assertTrue($index instanceof ArticleIndex);
$this->assertEquals(1, count($article->populatedRelations)); $this->assertEquals(1, count($article->populatedRelations));
$this->assertEquals($article->id, $index->id);
} }
public function testFindEager() public function testFindEager()

Loading…
Cancel
Save