【发布时间】:2019-04-05 14:51:55
【问题描述】:
我正在尝试在 YII2 中创建一个高性能模型。我连接了 2 个数据库(MSSQSL:自己的和 ERP 系统)——它可以工作。现在我尝试从 ERP 系统加载订单。系统将所有订单信息分布在不同的表中。
表格:订单
CREATE TABLE [dbo].[Order](
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[orderid] [int] NULL,
[name] [varchar](10) NULL,
[type] [tinyint] NOT NULL,
[lastupdate] [smalldatetime] NOT NULL,
....
表格:订单信息1
CREATE TABLE [dbo].[Order_Information1](
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Parameter] [int] NULL,
[Value] [varchar](255) NULL,
....
表格:订单信息2
CREATE TABLE [dbo].[Order_Information2](
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Parameter] [int] NULL,
[Value] [varchar](255) NULL,
....
我已经为所有模型创建了并且还可以单独访问这些表。在订单模型中,我建了一个类GetInformationData:
public function getInformationData ()
{
$description = Order_Information2::find()->select('Value')->where(['ID' => $this->id, 'Parameter' => 'txt_ description'])->one();
//...
$this->description = !empty($description) ? $description->Value : '';
//...
}
//...
它可以工作,但速度很慢。每个订单大约有 500 个参数 并且需要半天的时间才能加载所有内容;-(
我尝试连接模型,但不幸的是没有成功。
class Order extends ActiveRecord
{
// ...
public function getOrder_Information1()
{
return $this->hasMany(Order_Information1::className(), ['id' => 'id']);
}
}
class Order_Information1 extends ActiveRecord
{
// ...
public function getOrder()
{
return $this->hasOne(Order::className(), ['id' => 'id']);
}
}
【问题讨论】: