breezelfie
- breezelfie 赞了回答
1 首先运用事物必须是
innodb
引擎。其他无效,所以你先检查下数据库使用的引擎。2 当
$i=10
或11
的时候,$test->save()
会返回false
,这仅仅是插入数据库没有成功,并不会抛出一个异常 只有产生异常的时候,才会被catch
到,走catch
里的代码。当
for
循环完成后,因为没有产生异常,所以会走$tr->commit();
这行代码。如果你想让插入失败也抛出异常的话,可以自己手动添加,这样失败的时候就会走
catch
里面的代码了。if($test->save()) { //插入成功 } else { //插入失败 throw new Exception('insert error'); }
- breezelfie 赞了回答
关于“行为”,建议你参考下这篇文章先了解下Mixin:http://www.cnblogs.com/snandy/archive/2013/05/24/3086663.html
Yii2 里面的 behavior 其实就是 Mixin 模式的一种实践,它的主要目的在于给一个类添加另外一个类的功能,其实是多重继承的一种方式。
开始考虑觉得你的需求不适用 Mixin 模式,但是,仔细考虑下,还是可以用 behavior 以达到解耦的目的。
仔细考虑了下,你的需求用 behavior 实现的大致思路如下:
假设有 Model: Message,Comment。我们实现一个SendMessageBehavior 如下:
class SendMessageBehavior extends Behavior { public function events() { [ BaseActiveRecord::EVENT_AFTER_INSERT => "doSend", ] } public function doSend() { //执行Message::send方法 Message::send($this->owner); } }
将这个behavior绑定到 Comment 上面,以处理 EVENT_AFTER_INSERT 事件。
class Comment extend ActiveRecord { public function behaviors() { return [ SendMessageBehavior::className(), ]; } }
其思路就是在有新的评论时(comment 表的 insert 事件 ),执行 message::send方法。
- breezelfie 赞了回答
Yii::$app->db->schema->refresh();
flush all the schema cacheYii::$app->db->schema->refreshTableSchema($tableName);
clear the particular table schema cache - breezelfie 赞了回答
用缓存,\Yii::$app->cache->get('mykey');,只要不失效,全局皆可取之。
- breezelfie 回答了问题 yii中layout传递数据
用缓存,\Yii::$app->cache->get('mykey');,只要不失效,全局皆可取之。
- breezelfie 2015-08-03 已签到连续签到1天,获得了5个金钱