手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表全部文章

Yii activerecord 中 index的用法

很多时间,我们需要查询出来的结果按照指定的列进行索引,所以就会有了下面的代码

$lists = xxx::model('xx')->findAll(array('id'=>array(1,2,3,4,5)));//语句应该是不对的,表达我想in查询
然后
取出结果后
foreach($lists as $list){
   $ls[$list->id]=$list;
}
这样有没有简化写法呢?因为我这样之后,发现。。。in查询变成了多条查询。
但是是lazy loading Xxxxx.xxx(relation中的关联)

有的,Yii中有类似的写法,那就是ar中的index(上文我刚说了on)

'index': the name of the column whose values should be used as keys  of the array that stores related objects. 

于是直接

$lists = xxx::model('xx')->findAll(array('index'=>'id'));

就OK了

Tags: yii, framework, ar, index

Yii Relation记录

Yii的relation中遇到的问题,记录一下。。。

目前我有两个表,表不是我设计的。所以我才特别郁闷。

商品表:字段:p_id,member_id

商铺表:字段:shop_id,member_id

其中p_id,shop_id都是主键,member_id是索引

考虑过这个原因,是最初设计的时候,每一个普通用户都可以发布商品,所以商品表没有记录shop_id。

可能也会考虑过,每一个用户会有多个商铺吧,所以shop表的member_id也不是唯一索引。

然后,我用Yii在做表关联,事实上,在我们改动程序的时候,我们已经把普通用户能够发布商品这个功能去掉了,因此,事实上对我们来说member_id,其实肯定是于shop表中的member_id有对应关系。

于是我在ShopProduct的relations这样写

PHP代码
  1. /** 
  2.  * @return array relational rules. 
  3.  */  
  4. public function relations()  
  5. {  
  6.     // NOTE: you may need to adjust the relation name and the related  
  7.     // class name for the relations automatically generated below.  
  8.     return array(  
  9.            'member' => array(self::BELONGS_TO,'ShopMember','member_id','with'=>'extends','condition'=>"member.member_state = '1'"),  
  10.            'shop' => array(self::BELONGS_TO , 'ShopInfo' , 'member_id','on'=>'t.member_id = shop.member_id' ),  
  11.     );  
  12. }  

是的,看上去好象不错,指定了foreignKey为member_id,同时指定了关联条件,即shop.member_id=product.member_id,然而世事总是那样的难以预料。。。。

在Yii的代码中,关于relation的on是这样写的:

XML/HTML代码
  1. 'on': the ON clause. The condition specified here will be appended to the joining condition using the AND operator. This option has been available since version 1.0.2.  

所以,上述的代码在SQL中显示出来就是 select * from product left outer join shop on (product.member_id = shop.shop_id and product.member_id = shop.member_id)//这个代码是伪代码,只是为了说明问题。

问了Yii群和hightman,他们告诉我解决方法都是将foreignKey字段设为空或者False,然后再指定ON。

于是,问题解决。多谢 Fising 和 HightMan

 

 

Tags: yii, framework, relation

手机软件加入恶意发短信阵营?

真的是杂谈吧。
最近在微勃上看到啊兴一直在说,手机软件里被人植入恶意代码,会帮你订一些你不要订的信息,然后每月扣费之类的。SP现在赢利的手段已经到了这一步了?丧心病狂,能够形容这一些吗?

N多网上是这么说的:

XML/HTML代码
  1. 各位机友注意:  
  2.   
  3.   这两天大家热议的一批正常软件被恶意植入扣费代码的情况最新进展如下 :经过N多论坛多位版主的共同努力,终于筛选出了第一批有扣费代码植入的软件名单,马上公布给大家严防受害!  
  4.   
  5. 这些扣费软件会通过短信收发权限悄悄扣除用户的话费,同时还会向如UC浏览器这类按照激活计费的服务器发送激活数据赚取这些公司的推广费用。而其中直接的受害者就是咱们机友。  
  6.   
  7.   现在N多市场审核员们正在加班加点的对市场中已上架的应用进行全部重新审查,并对于新上传的应用提高审查标准,以确保机友们不被这些扣费软件坑害!  
  8.   
  9.     另一方面,N多网的管理员已经将版主们审查出来的带有扣费代码的软件样本提供给各大手机安全公司,全力推动和支持扣费软件查杀工具早日出世!     
  10.   
  11.   由于很多比较热门的软件和游戏都发现了被植入过扣费代码的版本,我们将检查出有过恶意扣费代码的软件和游戏名称发布在下面,这个列表会每天更新,帮助各位机友提高警惕,避免损失!  

其他的事情我不太清楚,我只知道,我在下载“十滴水”游戏的时候,时不时的会让我下载机锋的市场(所以我也很纳闷,到底只是一个notifition的提醒呢?还是已经帮我下载了?只是没装而已?)
流量啊?短信啊?手机上的事情还真难说清楚
再这样下去,智能手机又能多少人敢用?但我也不清楚这是不是那些安全公司搞出来的玩意,反正两者都可以赚钱,APK反编译又是特别的容易。

Yii使用EClientScript遇到的一点小问题

eclientscript是hightman开发的一个yii插件,用来对于script和css文件进行合并、压缩
当然在自己的项目中,我也为它加了不少的功能和组件,只是因为这是并非公用的东西,拿出来分享意义也不大。
比如,我定义了一个变量path,定义了几个全局的assetUrl,assetPath,然后可以指定目录生成压缩文件,把项目中关于商城、资讯、用户中心等的JS就可以彻底分开了(JS是无所谓,关键是CSS,因为它是认相对目录的)

好了,开始说我遇到的问题吧,目前我有一个JS,二级联动的JS,它是这样写的。

JavaScript代码
  1. (function($){  
  2.    $.fn.xxx = function(){}  
  3. })(jQuery);  

是的,它没有什么问题,而且也挺不错,这样的写法可以防止项目中的$被污染,而使用$只在这一个包里被使用,单独引用的时候,一点问题没有。然而问题就发生在它被合并到一个文件后,上面的代码就无法执行了。。。后来直接改成

XML/HTML代码
  1. $.fn.xxx = function(){}    

好吧,我偷懒了,但,将就点吧,没时间扑在上面。。。招人啊招人啊。。。
本文纯属工作记录,谢谢

Tags: yii, clientscript, jquery

清除数据库的binlog

如果数据库中没有什么太过重要的数据,每隔一段时间还是清除一下binlog吧。这玩意,对于没重要数据的人来说,实在没有意义 。。。。
大多数用binlog的,往往都是在wordpress上。因为它默认是innodb(好象3.01安装的时候,默认是myisam了。。至少我装的某一个库就是myisam的,很意外)

怎么清除bin log呢?先进入数据库命令行
show master logs;
purge master logs to 'mysql-bin.000010';
一般情况看看到最后一个是啥就留到啥吧。。。
留着最近的,真要出啥事了,还能恢复一下。。(不过,有多少人在自己的机器上恢复数据的?公司的除外。。。。)

Tags: innodb, mysql, binlog