Пример #1
0
 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());
 }
Пример #2
0
 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));
 }
Пример #4
0
 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());
 }