如何在yii 2中更新相关模型

时间:2018-03-28 15:48:54

标签: yii2

我有3个表来管理我的股票。

  • Items_table (item_id,label,stock...)stock具有0默认值。
  • orders_table (order_id,at_date,status)列状态具有0默认值。
  • orders_items_table(orderitem_id,order_id,item_id,quantity)管理订单详情。

我想要做的是更新订单“status1,并通过关注{{stock quantity更新项目“{1}}” 1}}。

这是我的orders_items_table

item_id

1 个答案:

答案 0 :(得分:0)

所以你应该最终得到三个模型。

第1步:创建三个ActiveRecord模型我将只为您创建一个

class Order extends \yii\db\ActiveRecord
{

    public static function tableName()
    {
        return 'orders';
    }

    public function rules()
    {
        return [
            [['id','status'], 'integer'],
        ];
    }

    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'Order Id'),
            'status' => Yii::t('app', 'Order Status'),
            'created_at' => Yii::t('app', 'Order Date'),
        ];
    }

    public function getOrderItems()
    {
        return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);
    }

    public function getItems()
    {
        return $this->hasMany(Item::className(), ['id' => 'item_id'])
            ->via('orderItems');
    }
}

现在您需要创建OrderItem模型,OrderItem hasOne Order和hasOne Item。之后创建具有许多OrderItem和Orders的Item模型。

第2步:创建您的控制器和以下

$order = Order::findOne($order_id);
if( ! is_null($order) ){
    //we found the order
    foreach ($order->orderItems as $orderItem) {
        //get the item
        $item = $orderItem->item;
        $item->stock = $item->stock - $orderItem->quantity;
        //save the item
        $item->save(); 
    }
    //update the order
    $order->status = 1;
    $order->save();
}

该代码只是为了向您展示如何做逻辑,不要忘记您需要进行验证和数据完整性。

查看更多Active Record