V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
autoname
V2EX  ›  问与答

有 YII2 的框架大神吗。问一个事

  •  
  •   autoname · 2018-04-22 14:18:58 +08:00 · 1377 次点击
    这是一个创建于 2194 天前的主题,其中的信息可能已经有所发展或是发生改变。

    AR 怎么更新的时候指定表 这样就直接报错了,说是没有 updateAllCounters 方法 $this->tableName() ->updateAllCounters(['downconunt' => 1]); 这样又不能指定表,我不想在 tablename 方法里面设置表。因为表有多个,所以不灵活 $this->updateAllCounters(['downconunt' => 1]);

    还有这个 new \yii\db\Query();

    怎么用更新,貌似只有查询的功能,没见有 UPdate 方法

    还有怎么在 script 添加一个属性

    <script type="text/html" id="test"> <script>
    7 条回复    2018-04-22 21:15:33 +08:00
    hoyixi
        1
    hoyixi  
       2018-04-22 16:27:47 +08:00
    哥们,提问的时候最好说清楚上下文,比如
    1 你想要干什么,预期达到什么结果;
    2 你具体怎么干的,用什么干的;
    3 结果报错了,错误信息是啥;

    不然别人很难懂你到底在说什么~

    第一段,没太明白你的意思,大概猜猜,回答供参考。

    $this->tableName(), 这是你在一个 AR model 类里调用的吧?$this 是 AR 实例,tableName()返回的是当前 AR 类关联的数据表名称,一个字符串。
    你在其后面直接链式调用 ->updateAllCounters,显然错误,一个字符串哪里来的 updateAllCounters 方法。 你要在 AR 类或者实例上调用才行

    第二段,想 update,可以用 yii\db\QueryBuilder,有 update 方法,具体看 yii\db\QueryBuilder 文档;
    另一种常用方式是:Yii::$app->db->createCommand()->update(), 具体看文档 yii\db\Command ;
    这两种都可以指定表名字。


    最后一段,想给 script 添加一个属性,直接加好了,你不是已经加了吗?如果是由 Yii2 辅助类输出的 script 标签,就去看那个辅助类的文档,一边都会有个 option 参数,让你传入自定义属性


    其实都是基本的用法,推荐自己去看官方文档,英文有难度可以看中文的,Yii 中文站:
    http://www.yiichina.com/doc
    http://www.yiichina.com/doc/guide/2.0
    http://www.yiichina.com/doc/api/2.0
    huijiewei
        2
    huijiewei  
       2018-04-22 18:48:09 +08:00
    updateAllCounters 是 ActiveRecord 的静态方法。正确用法是 Customer::updateAllCounters(['age' => 1]); 这样的。
    autoname
        3
    autoname  
    OP
       2018-04-22 19:28:51 +08:00
    @huijiewei

    Customer::updateAllCounters(['age' => 1]); 这样怎么指定一个表进行更新操作呢。

    我不想在 tablename 方法里面 写表,那里写的话 表被固定死了, 我那 MOD 是公用的,所有控制器都走那个。所以寻求一个更新的时候 指定表的
    autoname
        4
    autoname  
    OP
       2018-04-22 19:34:22 +08:00
    @hoyixi
    谢谢老铁,回答这么大一段,我直接忽略 了 。先回答了二楼的 回头才看你的,抱歉

    1 你想要干什么,预期达到什么结果;
    2 你具体怎么干的,用什么干的;
    3 结果报错了,错误信息是啥;


    我就是想 找个更新的方法。并且这个方法可以指定表名, 我不想要传整个 sql 语句的写法,$this->findBySql($sql)
    huijiewei
        5
    huijiewei  
       2018-04-22 19:46:46 +08:00
    @autoname https://www.yiiframework.com/doc/guide/2.0/zh-cn/db-active-record
    你好好看看文档,AR 类本身就绑定了一个表
    autoname
        6
    autoname  
    OP
       2018-04-22 21:04:18 +08:00
    @huijiewei 哎我就是看不懂,完全看不懂上面的英文文档,一堆字看着头疼
    autoname
        7
    autoname  
    OP
       2018-04-22 21:15:33 +08:00
    文档只有
    public static function tableName()
    {
    return 'customer';
    }
    这个 return 'customer'; 把数据库弄死了,要更新其他表就不行了,

    关键是这表我就更新一次也不经常用的,每个表都建立一个文件感觉有点 复杂 难管理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4118 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:15 · PVG 13:15 · LAX 22:15 · JFK 01:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.