Esempio n. 1
0
 public function testFind()
 {
     // find one
     $result = ArticleIndex::find();
     $this->assertTrue($result instanceof ActiveQuery);
     $article = $result->one();
     $this->assertTrue($article instanceof ArticleIndex);
     // find all
     $articles = ArticleIndex::find()->all();
     $this->assertEquals(2, count($articles));
     $this->assertTrue($articles[0] instanceof ArticleIndex);
     $this->assertTrue($articles[1] instanceof ArticleIndex);
     // find fulltext
     $article = ArticleIndex::findOne(2);
     $this->assertTrue($article instanceof ArticleIndex);
     $this->assertEquals(2, $article->id);
     // find by column values
     $article = ArticleIndex::findOne(['id' => 2, 'author_id' => 2]);
     $this->assertTrue($article instanceof ArticleIndex);
     $this->assertEquals(2, $article->id);
     $this->assertEquals(2, $article->author_id);
     $article = ArticleIndex::findOne(['id' => 2, 'author_id' => 1]);
     $this->assertNull($article);
     // find by attributes
     $article = ArticleIndex::find()->where(['author_id' => 2])->one();
     $this->assertTrue($article instanceof ArticleIndex);
     $this->assertEquals(2, $article->id);
     // find custom column
     $article = ArticleIndex::find()->select(['*', '(5*2) AS custom_column'])->where(['author_id' => 1])->one();
     $this->assertEquals(1, $article->id);
     $this->assertEquals(10, $article->custom_column);
     // find count, sum, average, min, max, scalar
     $this->assertEquals(2, ArticleIndex::find()->count());
     $this->assertEquals(1, ArticleIndex::find()->where('id=1')->count());
     $this->assertEquals(3, ArticleIndex::find()->sum('id'));
     $this->assertEquals(1.5, ArticleIndex::find()->average('id'));
     $this->assertEquals(1, ArticleIndex::find()->min('id'));
     $this->assertEquals(2, ArticleIndex::find()->max('id'));
     $this->assertEquals(2, ArticleIndex::find()->select('COUNT(*)')->scalar());
     // scope
     $this->assertEquals(1, ArticleIndex::find()->favoriteAuthor()->count());
     // asArray
     $article = ArticleIndex::find()->where('id=2')->asArray()->one();
     unset($article['add_date']);
     $this->assertEquals(['id' => '2', 'author_id' => '2', 'tag' => '3,4'], $article);
     // indexBy
     $articles = ArticleIndex::find()->indexBy('author_id')->orderBy('id DESC')->all();
     $this->assertEquals(2, count($articles));
     $this->assertTrue($articles['1'] instanceof ArticleIndex);
     $this->assertTrue($articles['2'] instanceof ArticleIndex);
     // indexBy callable
     $articles = ArticleIndex::find()->indexBy(function ($article) {
         return $article->id . '-' . $article->author_id;
     })->orderBy('id DESC')->all();
     $this->assertEquals(2, count($articles));
     $this->assertTrue($articles['1-1'] instanceof ArticleIndex);
     $this->assertTrue($articles['2-2'] instanceof ArticleIndex);
 }
 public function testFindLazy()
 {
     /** @var ArticleIndex $article */
     $article = ArticleIndex::findOne(['id' => 2]);
     // has one :
     $this->assertFalse($article->isRelationPopulated('source'));
     $source = $article->source;
     $this->assertTrue($article->isRelationPopulated('source'));
     $this->assertTrue($source instanceof ArticleDb);
     $this->assertEquals(1, count($article->relatedRecords));
     // has many :
     /*$this->assertFalse($article->isRelationPopulated('tags'));
       $tags = $article->tags;
       $this->assertTrue($article->isRelationPopulated('tags'));
       $this->assertEquals(3, count($tags));
       $this->assertTrue($tags[0] instanceof TagDb);*/
 }
 public function testFindLazy()
 {
     /* @var $article ArticleIndex */
     $article = ArticleIndex::findOne(['id' => 2]);
     // has one :
     $this->assertFalse($article->isRelationPopulated('source'));
     $source = $article->source;
     $this->assertTrue($article->isRelationPopulated('source'));
     $this->assertTrue($source instanceof ArticleDb);
     $this->assertEquals(1, count($article->relatedRecords));
     // has many :
     $this->assertFalse($article->isRelationPopulated('tags'));
     $tags = $article->tags;
     $this->assertTrue($article->isRelationPopulated('tags'));
     $this->assertEquals(count($article->tag), count($tags));
     $this->assertTrue($tags[0] instanceof TagDb);
     foreach ($tags as $tag) {
         $this->assertTrue(in_array($tag->id, $article->tag));
     }
 }