Codeigniter 在Active Record中限制批量更新数目

今天手头电商项目有个需求是:将订单中的优惠券自动发放给买家,因此要只更新优惠券表中的某几行数据,查了手册和网络都没有解决办法。php

一开始用循环和遍从来作都是错的,由于update语句一下就更新掉全部符合条件的行了,而用子查询当条件来作又很不符合kiss(keep it simple, stupid.)的规范。网络

因而尝试将set语句加入ar,这下大功告成。this

 

public function status($order_id, $slug)
{
    if($slug==='2')
    {
        # 发货流程, 先判断是否是优惠券
        if($this->_is_coupon_order($order_id))
        {
            $this->load->model('m_cart', 'cart', true);
            $undiscounted = $this->cart->items($order_id);
            $discounted   = $this->cart->items($order_id, true);
            $merged       = array_merge($undiscounted, $discounted);
            $this->db->where('status', 0)
                     ->where('rule_id', $merged[0]->type_id)
                     ->limit($merged[0]->item_quantity)
                     ->set('user_id', $merged[0]->user_id)
                     ->update('coupon');
        }
        $this->db->where('id', $order_id)->set('status', 2);
    }
    $this->db->update('order');
    return $this->db->affected_rows();
}
相关文章
相关标签/搜索