【问题标题】:YII2 Model for an OrderObjectOrderObject 的 YII2 模型
【发布时间】: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']);
    }
}

【问题讨论】:

    标签: php model yii2 erp


    【解决方案1】:

    您没有分享太多细节,但是您可以在一个查询中查询所有参数并避免创建模型(这似乎没有使用,因为您只需要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;
        }
        //...
    }
    

    【讨论】:

    • It doesn't work 究竟是什么意思?你有任何错误吗?
    • 嘿 Rob,我认为语法不正确:foreach ($data as ['Parameter' => $parameter, 'Value' => $value]) {
    • 应该没问题,但是需要PHP 7.1才能使用:3v4l.org/BRIU8
    • 哦,我使用的是 PHP 7。这里也有解决方案吗?谢谢抢劫
    • 你可以使用foreach ($data as $row) { $parameter = $row['Parameter']; $value = $row['Value'];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多