我有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)
管理订单详情。我想要做的是更新订单“status
”1
,并通过关注{{stock
quantity
更新项目“{1}}” 1}}。
这是我的orders_items_table
item_id
答案 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