public function testIssue64() { $this->assertEquals(1, Category::objects()->count()); $this->assertEquals(2, Product::objects()->count()); $this->assertEquals(2, ProductList::objects()->count()); $category = Category::objects()->get(); $this->assertEquals(2, $category->products->count()); $this->assertEquals(1, $category->products->filter(['name' => 'bar'])->count()); $this->assertEquals(2, $category->products->filter(['lists__name' => 'test'])->count()); $this->assertEquals(1, $category->products->filter(['lists__name' => 'asd'])->count()); $this->assertEquals("SELECT `tests_product_1`.* FROM `tests_product` `tests_product_1` LEFT OUTER JOIN `tests_product_tests_product_list` `tests_product_tests_product_list_2` ON `tests_product_1`.`id` = `tests_product_tests_product_list_2`.`product_id` LEFT OUTER JOIN `tests_product_list` `tests_product_list_3` ON `tests_product_tests_product_list_2`.`product_list_id` = `tests_product_list_3`.`id` WHERE ((`tests_product_1`.`category_id`='1')) AND ((`tests_product_list_3`.`name`='asd')) GROUP BY `tests_product_1`.`id`", $category->products->filter(['lists__name' => 'asd'])->allSql()); }
public function testQ() { $qs = Product::objects()->filter([new OrQ([['name' => 'vasya', 'id__lte' => 7], ['name' => 'petya', 'id__gte' => 4]])]); $this->assertEquals("SELECT `tests_product_1`.* FROM `tests_product` `tests_product_1` WHERE (((`tests_product_1`.`name`='vasya') AND ((`tests_product_1`.`id` <= 7))) OR ((`tests_product_1`.`name`='petya') AND ((`tests_product_1`.`id` >= 4))))", $qs->allSql()); $qs = Product::objects()->filter([new OrQ([['name' => 'vasya', 'id__lte' => 7], ['name' => 'petya', 'id__gte' => 4]]), 'price__gte' => 200]); $this->assertEquals("SELECT `tests_product_1`.* FROM `tests_product` `tests_product_1` WHERE (((`tests_product_1`.`name`='vasya') AND ((`tests_product_1`.`id` <= 7))) OR ((`tests_product_1`.`name`='petya') AND ((`tests_product_1`.`id` >= 4)))) AND ((`tests_product_1`.`price` >= 200))", $qs->allSql()); $qs = Product::objects()->filter([new AndQ([['name' => 'vasya', 'id__lte' => 7], ['name' => 'petya', 'id__gte' => 4]]), 'price__gte' => 200]); $this->assertEquals("SELECT `tests_product_1`.* FROM `tests_product` `tests_product_1` WHERE (((`tests_product_1`.`name`='vasya') AND ((`tests_product_1`.`id` <= 7))) AND ((`tests_product_1`.`name`='petya') AND ((`tests_product_1`.`id` >= 4)))) AND ((`tests_product_1`.`price` >= 200))", $qs->allSql()); }
public function testExtraLinkRecords() { $product = new Product(); $product->name = 'Bear'; $product->price = 100; $product->description = 'Funny white bear'; $product->save(); $list1 = new ProductList(); $list1->name = 'Toys'; $list1->save(); $list2 = new ProductList(); $list2->name = 'Trash'; $list2->save(); $this->assertEquals(1, Product::objects()->count()); $this->assertEquals(2, ProductList::objects()->count()); $tableName = $product->getField('lists')->getTableName(); $cmd = ConnectionManager::getDb()->createCommand("SELECT * FROM {$tableName}"); $all = $cmd->queryAll(); $this->assertEquals([], $all); $this->assertEquals(0, count($all)); $product->lists = [$list1]; $product->save(); $cmd = ConnectionManager::getDb()->createCommand("SELECT * FROM {$tableName}"); $all = $cmd->queryAll(); $this->assertEquals([['product_id' => 1, 'product_list_id' => 1]], $all); $this->assertEquals(1, count($all)); $product->lists = [$list2]; $product->save(); $cmd = ConnectionManager::getDb()->createCommand("SELECT * FROM {$tableName}"); $all = $cmd->queryAll(); $this->assertEquals([['product_id' => 1, 'product_list_id' => 2]], $all); $this->assertEquals(1, count($all)); $product->lists = [$list1]; $product->save(); $cmd = ConnectionManager::getDb()->createCommand("SELECT * FROM {$tableName}"); $all = $cmd->queryAll(); $this->assertEquals([['product_id' => 1, 'product_list_id' => 1]], $all); $this->assertEquals(1, count($all)); $product->lists = [$list1, $list1, $list1]; $product->save(); $cmd = ConnectionManager::getDb()->createCommand("SELECT * FROM {$tableName}"); $all = $cmd->queryAll(); $this->assertEquals([['product_id' => 1, 'product_list_id' => 1], ['product_id' => 1, 'product_list_id' => 1], ['product_id' => 1, 'product_list_id' => 1]], $all); $this->assertEquals(3, count($all)); }
public function testAllSql() { $qs = Product::objects()->filter(['id' => 1]); $this->assertEquals("SELECT \"tests_product_1\".* FROM \"tests_product\" \"tests_product_1\" WHERE ((\"tests_product_1\".\"id\"=1))", $qs->getSql()); $this->assertEquals("SELECT \"tests_product_1\".* FROM \"tests_product\" \"tests_product_1\" WHERE ((\"tests_product_1\".\"id\"=1))", $qs->allSql()); $this->assertEquals("SELECT COUNT(*) FROM \"tests_product\" \"tests_product_1\" WHERE ((\"tests_product_1\".\"id\"=1))", $qs->countSql()); }