2017-11-09 09:13:21 1956次浏览 2条回答 0 悬赏 15 金钱

效果与与这条sql语句差不多update product as a, product as b set a.original_price=b.price, a.price=b.original_price where a.id=b.id
用ActiveRecord怎么实现,谢谢大家了

  • 回答于 2017-11-09 16:15 举报

    为什么不用createCommand($sql); ?

  • 回答于 2017-11-09 22:13 举报

    我猜啊,可以这样

    $models = Product::find()->all();
    foreach($models as $model) {
        $tmp = $model->price;
        $model->price = $model->original_price;
        $model->original_price = $tmp;
        $model->update(false); 
    }
    

    或者
    模型里
    修改Product.php

    public static function tableName()
    {
        return 'product AS a, product As b';
    }
    

    控制器里
    $result = Product::updateAll(['a.original_price' => 'b.price', 'a.price' => 'b.original_price'], 'a.id=b.id');
    这个我试了,不管用,多个'号

    不过还是推荐楼上说的,一个createCommand就能解决,不能片面为了追求代码统一,主要是想用活动记录必须修改底层代码,但是得不偿失,嗯,好像这样的。。。

您需要登录后才可以回答。登录 | 立即注册
wsd15321
见习主管

wsd15321

注册时间:2017-11-08
最后登录:2019-06-13
在线时长:3小时12分
  • 粉丝0
  • 金钱255
  • 威望20
  • 积分485

热门问题