OrderObject的YII2模型

问题描述 投票:0回答:1

我试图在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']);
    }
}
php model yii2 erp
1个回答
0
投票

您没有分享太多细节,但您可以在一个查询中查询所有参数并避免创建模型(这似乎未使用,因为您只需要Value):

public function getInformationData () {
    $data = Order_Information2::find()
        ->select(['Parameter', 'Value'])
        ->where(['ID' => $this->id])
        ->asArray()
        ->all();
    foreach ($data as ['Parameter' => $parameter, 'Value' => $value]) {
        $this->$parameter = $value;
    }
    //...
}
© www.soinside.com 2019 - 2024. All rights reserved.