mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-26 14:26:54 +08:00
Change unit test to Unlink and add test to unlinkAll
This commit is contained in:
@ -36,6 +36,10 @@ class Customer extends ActiveRecord
|
||||
{
|
||||
return $this->hasMany(Order::className(), ['customer_id' => 'id'])->orderBy('id');
|
||||
}
|
||||
public function getOrdersWithNullFK()
|
||||
{
|
||||
return $this->hasMany(OrderWithNullFK::className(), ['customer_id' => 'id'])->orderBy('id');
|
||||
}
|
||||
|
||||
public function getOrders2()
|
||||
{
|
||||
|
@ -40,6 +40,12 @@ class Order extends ActiveRecord
|
||||
})->orderBy('item.id');
|
||||
}
|
||||
|
||||
public function getItemsWithNullFK()
|
||||
{
|
||||
return $this->hasMany(Item::className(), ['id' => 'item_id'])
|
||||
->viaTable('order_item_with_null_fk', ['order_id' => 'id']);
|
||||
}
|
||||
|
||||
public function getItemsInOrder1()
|
||||
{
|
||||
return $this->hasMany(Item::className(), ['id' => 'item_id'])
|
||||
@ -63,6 +69,13 @@ class Order extends ActiveRecord
|
||||
->where(['category_id' => 1]);
|
||||
}
|
||||
|
||||
public function getBooksWithNullFK()
|
||||
{
|
||||
return $this->hasMany(Item::className(), ['id' => 'item_id'])
|
||||
->viaTable('order_item_with_null_fk', ['order_id' => 'id'])
|
||||
->where(['category_id' => 1]);
|
||||
}
|
||||
|
||||
public function getBooks2()
|
||||
{
|
||||
return $this->hasMany(Item::className(), ['id' => 'item_id'])
|
||||
|
20
tests/unit/data/ar/OrderItemWithNullFK.php
Normal file
20
tests/unit/data/ar/OrderItemWithNullFK.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace yiiunit\data\ar;
|
||||
|
||||
/**
|
||||
* Class OrderItem
|
||||
*
|
||||
* @property integer $order_id
|
||||
* @property integer $item_id
|
||||
* @property integer $quantity
|
||||
* @property string $subtotal
|
||||
*/
|
||||
class OrderItemWithNullFK extends ActiveRecord
|
||||
{
|
||||
public static function tableName()
|
||||
{
|
||||
return 'order_item_with_null_fk';
|
||||
}
|
||||
|
||||
}
|
21
tests/unit/data/ar/OrderWithNullFK.php
Normal file
21
tests/unit/data/ar/OrderWithNullFK.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace yiiunit\data\ar;
|
||||
|
||||
/**
|
||||
* Class Order
|
||||
*
|
||||
* @property integer $id
|
||||
* @property integer $customer_id
|
||||
* @property integer $created_at
|
||||
* @property string $total
|
||||
*/
|
||||
class OrderWithNullFK extends ActiveRecord
|
||||
{
|
||||
public static function tableName()
|
||||
{
|
||||
return 'order_with_null_fk';
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -5,8 +5,10 @@
|
||||
|
||||
DROP TABLE IF EXISTS `composite_fk`;
|
||||
DROP TABLE IF EXISTS `order_item`;
|
||||
DROP TABLE IF EXISTS `order_item_with_null_fk`;
|
||||
DROP TABLE IF EXISTS `item`;
|
||||
DROP TABLE IF EXISTS `order`;
|
||||
DROP TABLE IF EXISTS `order_with_null_fk`;
|
||||
DROP TABLE IF EXISTS `category`;
|
||||
DROP TABLE IF EXISTS `customer`;
|
||||
DROP TABLE IF EXISTS `profile`;
|
||||
@ -60,6 +62,14 @@ CREATE TABLE `order` (
|
||||
CONSTRAINT `FK_order_customer_id` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE `order_with_null_fk` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`customer_id` int(11),
|
||||
`created_at` int(11) NOT NULL,
|
||||
`total` decimal(10,0) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
|
||||
CREATE TABLE `order_item` (
|
||||
`order_id` int(11) NOT NULL,
|
||||
`item_id` int(11) NOT NULL,
|
||||
@ -70,6 +80,13 @@ CREATE TABLE `order_item` (
|
||||
CONSTRAINT `FK_order_item_item_id` FOREIGN KEY (`item_id`) REFERENCES `item` (`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE `order_item_with_null_fk` (
|
||||
`order_id` int(11),
|
||||
`item_id` int(11),
|
||||
`quantity` int(11) NOT NULL,
|
||||
`subtotal` decimal(10,0) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE null_values (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`var1` INT NULL,
|
||||
@ -124,9 +141,20 @@ INSERT INTO `order` (customer_id, created_at, total) VALUES (1, 1325282384, 110.
|
||||
INSERT INTO `order` (customer_id, created_at, total) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO `order` (customer_id, created_at, total) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO `order_with_null_fk` (customer_id, created_at, total) VALUES (1, 1325282384, 110.0);
|
||||
INSERT INTO `order_with_null_fk` (customer_id, created_at, total) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO `order_with_null_fk` (customer_id, created_at, total) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0);
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1, 15.0);
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0);
|
||||
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1, 15.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0);
|
||||
|
@ -1,6 +1,8 @@
|
||||
IF OBJECT_ID('[dbo].[order_item]', 'U') IS NOT NULL DROP TABLE [dbo].[order_item];
|
||||
IF OBJECT_ID('[dbo].[order_item_with_null_fk]', 'U') IS NOT NULL DROP TABLE [dbo].[order_item_with_null_fk];
|
||||
IF OBJECT_ID('[dbo].[item]', 'U') IS NOT NULL DROP TABLE [dbo].[item];
|
||||
IF OBJECT_ID('[dbo].[order]', 'U') IS NOT NULL DROP TABLE [dbo].[order];
|
||||
IF OBJECT_ID('[dbo].[order_with_null_fk]', 'U') IS NOT NULL DROP TABLE [dbo].[order_with_null_fk];
|
||||
IF OBJECT_ID('[dbo].[category]', 'U') IS NOT NULL DROP TABLE [dbo].[category];
|
||||
IF OBJECT_ID('[dbo].[customer]', 'U') IS NOT NULL DROP TABLE [dbo].[customer];
|
||||
IF OBJECT_ID('[dbo].[profile]', 'U') IS NOT NULL DROP TABLE [dbo].[profile];
|
||||
@ -54,6 +56,13 @@ CREATE TABLE [dbo].[order] (
|
||||
) ON [PRIMARY]
|
||||
);
|
||||
|
||||
CREATE TABLE [dbo].[order_with_null_fk] (
|
||||
[id] [int] IDENTITY(1,1) NOT NULL,
|
||||
[customer_id] [int] ,
|
||||
[created_at] [int] NOT NULL,
|
||||
[total] [decimal](10,0) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE [dbo].[order_item] (
|
||||
[order_id] [int] NOT NULL,
|
||||
[item_id] [int] NOT NULL,
|
||||
@ -63,6 +72,12 @@ CREATE TABLE [dbo].[order_item] (
|
||||
[order_id] ASC,
|
||||
[item_id] ASC
|
||||
) ON [PRIMARY]
|
||||
|
||||
);CREATE TABLE [dbo].[order_item_with_null_fk] (
|
||||
[order_id] [int],
|
||||
[item_id] [int],
|
||||
[quantity] [int] NOT NULL,
|
||||
[subtotal] [decimal](10,0) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE [dbo].[null_values] (
|
||||
@ -109,9 +124,20 @@ INSERT INTO [dbo].[order] ([customer_id], [created_at], [total]) VALUES (1, 1325
|
||||
INSERT INTO [dbo].[order] ([customer_id], [created_at], [total]) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO [dbo].[order] ([customer_id], [created_at], [total]) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO [dbo].[order_with_null_fk] ([customer_id], [created_at], [total]) VALUES (1, 1325282384, 110.0);
|
||||
INSERT INTO [dbo].[order_with_null_fk] ([customer_id], [created_at], [total]) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO [dbo].[order_with_null_fk] ([customer_id], [created_at], [total]) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 4, 1, 10.0);
|
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 5, 1, 15.0);
|
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (3, 2, 1, 40.0);
|
||||
|
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 4, 1, 10.0);
|
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 5, 1, 15.0);
|
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (3, 2, 1, 40.0);
|
||||
|
@ -5,8 +5,10 @@
|
||||
|
||||
DROP TABLE IF EXISTS `composite_fk` CASCADE;
|
||||
DROP TABLE IF EXISTS `order_item` CASCADE;
|
||||
DROP TABLE IF EXISTS `order_item_with_null_fk` CASCADE;
|
||||
DROP TABLE IF EXISTS `item` CASCADE;
|
||||
DROP TABLE IF EXISTS `order` CASCADE;
|
||||
DROP TABLE IF EXISTS `order_with_null_fk` CASCADE;
|
||||
DROP TABLE IF EXISTS `category` CASCADE;
|
||||
DROP TABLE IF EXISTS `customer` CASCADE;
|
||||
DROP TABLE IF EXISTS `profile` CASCADE;
|
||||
@ -61,6 +63,14 @@ CREATE TABLE `order` (
|
||||
CONSTRAINT `FK_order_customer_id` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE `order_with_null_fk` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`customer_id` int(11),
|
||||
`created_at` int(11) NOT NULL,
|
||||
`total` decimal(10,0) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE `order_item` (
|
||||
`order_id` int(11) NOT NULL,
|
||||
`item_id` int(11) NOT NULL,
|
||||
@ -72,6 +82,14 @@ CREATE TABLE `order_item` (
|
||||
CONSTRAINT `FK_order_item_item_id` FOREIGN KEY (`item_id`) REFERENCES `item` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
CREATE TABLE `order_item_with_null_fk` (
|
||||
`order_id` int(11),
|
||||
`item_id` int(11),
|
||||
`quantity` int(11) NOT NULL,
|
||||
`subtotal` decimal(10,0) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE `composite_fk` (
|
||||
`id` int(11) NOT NULL,
|
||||
`order_id` int(11) NOT NULL,
|
||||
@ -124,6 +142,10 @@ INSERT INTO `order` (customer_id, created_at, total) VALUES (1, 1325282384, 110.
|
||||
INSERT INTO `order` (customer_id, created_at, total) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO `order` (customer_id, created_at, total) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO `order_with_null_fk` (customer_id, created_at, total) VALUES (1, 1325282384, 110.0);
|
||||
INSERT INTO `order_with_null_fk` (customer_id, created_at, total) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO `order_with_null_fk` (customer_id, created_at, total) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0);
|
||||
@ -131,6 +153,13 @@ INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO `order_item` (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0);
|
||||
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1, 15.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO `order_item_with_null_fk` (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0);
|
||||
|
||||
|
||||
/**
|
||||
* (MySQL-)Database Schema for validator tests
|
||||
|
@ -6,7 +6,9 @@
|
||||
|
||||
DROP TABLE IF EXISTS "order_item" CASCADE;
|
||||
DROP TABLE IF EXISTS "item" CASCADE;
|
||||
DROP TABLE IF EXISTS "order_item_with_null_fk" CASCADE;
|
||||
DROP TABLE IF EXISTS "order" CASCADE;
|
||||
DROP TABLE IF EXISTS "order_with_null_fk" CASCADE;
|
||||
DROP TABLE IF EXISTS "category" CASCADE;
|
||||
DROP TABLE IF EXISTS "customer" CASCADE;
|
||||
DROP TABLE IF EXISTS "profile" CASCADE;
|
||||
@ -54,6 +56,13 @@ CREATE TABLE "order" (
|
||||
total decimal(10,0) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE "order_with_null_fk" (
|
||||
id serial not null primary key,
|
||||
customer_id integer,
|
||||
created_at integer NOT NULL,
|
||||
total decimal(10,0) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE "order_item" (
|
||||
order_id integer NOT NULL references "order"(id) on UPDATE CASCADE on DELETE CASCADE,
|
||||
item_id integer NOT NULL references "item"(id) on UPDATE CASCADE on DELETE CASCADE,
|
||||
@ -62,6 +71,13 @@ CREATE TABLE "order_item" (
|
||||
PRIMARY KEY (order_id,item_id)
|
||||
);
|
||||
|
||||
CREATE TABLE "order_item_with_null_fk" (
|
||||
order_id integer,
|
||||
item_id integer,
|
||||
quantity integer NOT NULL,
|
||||
subtotal decimal(10,0) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE "null_values" (
|
||||
id INT NOT NULL,
|
||||
var1 INT NULL,
|
||||
@ -106,6 +122,10 @@ INSERT INTO "order" (customer_id, created_at, total) VALUES (1, 1325282384, 110.
|
||||
INSERT INTO "order" (customer_id, created_at, total) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO "order" (customer_id, created_at, total) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO "order_with_null_fk" (customer_id, created_at, total) VALUES (1, 1325282384, 110.0);
|
||||
INSERT INTO "order_with_null_fk" (customer_id, created_at, total) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO "order_with_null_fk" (customer_id, created_at, total) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0);
|
||||
@ -113,6 +133,13 @@ INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0);
|
||||
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1, 15.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0);
|
||||
|
||||
/**
|
||||
* (Postgres-)Database Schema for validator tests
|
||||
*/
|
||||
|
@ -5,8 +5,10 @@
|
||||
|
||||
DROP TABLE IF EXISTS "composite_fk";
|
||||
DROP TABLE IF EXISTS "order_item";
|
||||
DROP TABLE IF EXISTS "order_item_with_null_fk";
|
||||
DROP TABLE IF EXISTS "item";
|
||||
DROP TABLE IF EXISTS "order";
|
||||
DROP TABLE IF EXISTS "order_with_null_fk";
|
||||
DROP TABLE IF EXISTS "category";
|
||||
DROP TABLE IF EXISTS "customer";
|
||||
DROP TABLE IF EXISTS "profile";
|
||||
@ -50,6 +52,14 @@ CREATE TABLE "order" (
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
CREATE TABLE "order_with_null_fk" (
|
||||
id INTEGER NOT NULL,
|
||||
customer_id INTEGER,
|
||||
created_at INTEGER NOT NULL,
|
||||
total decimal(10,0) NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
CREATE TABLE "order_item" (
|
||||
order_id INTEGER NOT NULL,
|
||||
item_id INTEGER NOT NULL,
|
||||
@ -58,6 +68,13 @@ CREATE TABLE "order_item" (
|
||||
PRIMARY KEY (order_id, item_id)
|
||||
);
|
||||
|
||||
CREATE TABLE "order_item_with_null_fk" (
|
||||
order_id INTEGER,
|
||||
item_id INTEGER,
|
||||
quantity INTEGER NOT NULL,
|
||||
subtotal decimal(10,0) NOT NULL,
|
||||
);
|
||||
|
||||
CREATE TABLE "composite_fk" (
|
||||
id int(11) NOT NULL,
|
||||
order_id int(11) NOT NULL,
|
||||
@ -109,6 +126,10 @@ INSERT INTO "order" (customer_id, created_at, total) VALUES (1, 1325282384, 110.
|
||||
INSERT INTO "order" (customer_id, created_at, total) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO "order" (customer_id, created_at, total) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO "order_with_null_fk" (customer_id, created_at, total) VALUES (1, 1325282384, 110.0);
|
||||
INSERT INTO "order_with_null_fk" (customer_id, created_at, total) VALUES (2, 1325334482, 33.0);
|
||||
INSERT INTO "order_with_null_fk" (customer_id, created_at, total) VALUES (2, 1325502201, 40.0);
|
||||
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0);
|
||||
@ -116,6 +137,13 @@ INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO "order_item" (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0);
|
||||
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (1, 1, 1, 30.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (1, 2, 2, 40.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1, 15.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0);
|
||||
INSERT INTO "order_item_with_null_fk" (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0);
|
||||
|
||||
/**
|
||||
* (SqLite-)Database Schema for validator tests
|
||||
*/
|
||||
|
@ -678,24 +678,95 @@ trait ActiveRecordTestTrait
|
||||
$customerClass = $this->getCustomerClass();
|
||||
/** @var \yii\db\ActiveRecordInterface $orderClass */
|
||||
$orderClass = $this->getOrderClass();
|
||||
/** @var \yii\db\ActiveRecordInterface $orderWithNullFKClass */
|
||||
$orderWithNullFKClass = $this->getOrderWithNullFKClass();
|
||||
/** @var \yii\db\ActiveRecordInterface $orderItemsWithNullFKClass */
|
||||
$orderItemsWithNullFKClass = $this->getOrderIteWithNullFKmClass();
|
||||
|
||||
|
||||
|
||||
/** @var TestCase|ActiveRecordTestTrait $this */
|
||||
// has many
|
||||
// has many without delete
|
||||
$customer = $customerClass::findOne(2);
|
||||
$this->assertEquals(2, count($customer->ordersWithNullFK));
|
||||
$customer->unlink('ordersWithNullFK', $customer->ordersWithNullFK[1], false);
|
||||
|
||||
$this->assertEquals(1, count($customer->ordersWithNullFK));
|
||||
$orderWithNullFK = $orderWithNullFKClass::findOne(3);
|
||||
|
||||
$this->assertEquals(3,$orderWithNullFK->id);
|
||||
$this->assertNull($orderWithNullFK->customer_id);
|
||||
|
||||
// has many with delete
|
||||
$customer = $customerClass::findOne(2);
|
||||
$this->assertEquals(2, count($customer->orders));
|
||||
$customer->unlink('orders', $customer->orders[1], true);
|
||||
$this->afterSave();
|
||||
|
||||
$this->assertEquals(1, count($customer->orders));
|
||||
$this->assertNull($orderClass::findOne(3));
|
||||
|
||||
// via model
|
||||
// via model with delete
|
||||
$order = $orderClass::findOne(2);
|
||||
$this->assertEquals(3, count($order->items));
|
||||
$this->assertEquals(3, count($order->orderItems));
|
||||
$order->unlink('items', $order->items[2], true);
|
||||
$this->afterSave();
|
||||
|
||||
$this->assertEquals(2, count($order->items));
|
||||
$this->assertEquals(2, count($order->orderItems));
|
||||
|
||||
// via model without delete
|
||||
$this->assertEquals(3, count($order->itemsWithNullFK));
|
||||
$order->unlink('itemsWithNullFK', $order->itemsWithNullFK[2], false);
|
||||
|
||||
$this->assertEquals(2, count($order->itemsWithNullFK));
|
||||
$this->assertEquals(2, count($order->orderItems));
|
||||
}
|
||||
|
||||
public function testUnlinkAll()
|
||||
{
|
||||
/** @var \yii\db\ActiveRecordInterface $customerClass */
|
||||
$customerClass = $this->getCustomerClass();
|
||||
/** @var \yii\db\ActiveRecordInterface $orderClass */
|
||||
$orderClass = $this->getOrderClass();
|
||||
|
||||
$orderWithNullFKClass = $this->getOrderWithNullFKClass();
|
||||
|
||||
/** @var \yii\db\ActiveRecordInterface $orderItemsWithNullFKClass */
|
||||
$orderItemsWithNullFKClass = $this->getOrderIteWithNullFKmClass();
|
||||
|
||||
/** @var TestCase|ActiveRecordTestTrait $this */
|
||||
// has many with delete
|
||||
$customer = $customerClass::findOne(2);
|
||||
$this->assertEquals(2, count($customer->orders));
|
||||
$customer->unlinkAll('orders', true);
|
||||
|
||||
$this->assertEquals(0, count($customer->orders));
|
||||
|
||||
$this->assertNull($orderClass::findOne(2));
|
||||
$this->assertNull($orderClass::findOne(3));
|
||||
|
||||
|
||||
// has many without delete
|
||||
$customer = $customerClass::findOne(2);
|
||||
$this->assertEquals(2, count($customer->ordersWithNullFK));
|
||||
$customer->unlinkAll('ordersWithNullFK', false);
|
||||
|
||||
$this->assertEquals(0, count($customer->ordersWithNullFK));
|
||||
|
||||
$this->assertEquals(2,$orderWithNullFKClass::find()->where('(id=2 OR id=3) AND customer_id IS NULL')->count());
|
||||
|
||||
// via model with delete
|
||||
/** @var Order $order */
|
||||
$order = $orderClass::findOne(1);
|
||||
$this->assertEquals(2, count($order->books));
|
||||
$order->unlinkAll('books', true);
|
||||
$this->assertEquals(0, count($order->books));
|
||||
|
||||
// via model without delete
|
||||
$books = $order->booksWithNullFK;
|
||||
$this->assertEquals(2, count($books));
|
||||
$order->unlinkAll('booksWithNullFK',false);
|
||||
$this->assertEquals(2,$orderItemsWithNullFKClass::find()->where('(item_id=1 OR item_id=2) AND order_id IS NULL')->count());
|
||||
}
|
||||
|
||||
public static $afterSaveNewRecord;
|
||||
|
@ -7,6 +7,8 @@ use yiiunit\data\ar\NullValues;
|
||||
use yiiunit\data\ar\OrderItem;
|
||||
use yiiunit\data\ar\Order;
|
||||
use yiiunit\data\ar\Item;
|
||||
use yiiunit\data\ar\OrderItemWithNullFK;
|
||||
use yiiunit\data\ar\OrderWithNullFK;
|
||||
use yiiunit\data\ar\Profile;
|
||||
use yiiunit\data\ar\Type;
|
||||
use yiiunit\framework\ar\ActiveRecordTestTrait;
|
||||
@ -46,6 +48,15 @@ class ActiveRecordTest extends DatabaseTestCase
|
||||
return OrderItem::className();
|
||||
}
|
||||
|
||||
public function getOrderWithNullFKClass()
|
||||
{
|
||||
return OrderWithNullFK::className();
|
||||
}
|
||||
public function getOrderIteWithNullFKmClass()
|
||||
{
|
||||
return OrderItemWithNullFK::className();
|
||||
}
|
||||
|
||||
public function testCustomColumns()
|
||||
{
|
||||
// find custom column
|
||||
|
Reference in New Issue
Block a user