Yii2几个要注意的小地方
本人新手, 刚接触Yii, 记录下遇到的坑, 大神请绕道/
1.
//插入数据到数据库, 需要 new 一下,设置属性;
$info = new BasicInfo();
$info -> setAttributes($data);
new 之后 这里 $data 就可以是一个数组
但如果是更新数据的话(不new), 只能一个一个压入数据. //如果不对的话, 请吐槽, 必须吐槽!~
$info = BasicInfo::findOne($data['id']);
if($data == $info['attributes'])
{
$this->setError('未更改任何信息!');
return false;
}
$info -> phone = $data['phone'];
$info -> email = $data['email'];
$info -> address = $data['address'];
$info -> work_time = $data['work_time'];
这里顺道说一下 $res->save(false) 中的false 参数, 关闭数据库的验证, 貌似实在model中的验证规则,
if(!$res->save(false))
{
$this->setError($res->getErrors());
return false;
}
2. 关于数据库连贯操作 ->asArray(); 可以加参数true, 但是加不加有什么区别?
asArray() 只能在model的查询中使用, 很多时候还是建议大家加上asAaary(), 不然特别是列表的时候. 容易报错
我曾经因为这个弱智问题纠结了半天.//../
3. 从来没想过 like 竟然可以多个连起来用
Yii 用sql的原生语句, 关于多个like 查询, 但在sql中{$like}要用( ) 包起来, 否则会有bug, 为什么? 我也不知道
$like = '';
for($i=0;$i<$num;$i++)
{
$like .= "label LIKE '%{$label[$i]}%' OR ";
}
$like = rtrim($like,'OR ');
$sql = "SELECT article_id,title,summary,create_time From articles WHERE status=1 and article_id!={$article_id} and ({$like})
ORDER BY create_time DESC limit 2";
$Article = \Yii::$app->dbofficial
->createCommand($sql)
->queryAll(); //查询用query, 其他用execute
4. 用select别名, 只需要在model文件中把想用的别名设置为public属性/
比如select('goods_id as gid') 去model中设置 public $gid, 就可以用了
貌似必须用->asArraay() 这个连贯操作, 不然会报错.
5. joinwith 联查实例
$artList = Article::find()->joinWith('user',false)->select('article_id,articles.create_time,title,name as uname')->where(['articles.status'=>1])->orderBy('articles.create_time DESC')->asArray();
想要上面的代码生效, 你需要去Article的model中添加如下代码, 告诉系统两者之间的关系,
public function getUser()
{
return $this->hasOne(User::className(), ['id' => 'user_id']);
}
看下面
->joinWith('user',false)
这里如果你忘了加 false参数, 那么你可能跟我一样傻逼半个钟头, 虽然查出来的数据都对, 但是有个子数组, 看着很恶心, 如果键名重复, 查询结果还会受到影响
6.
事务
use yii\db\Transaction;
$connection = \Yii::$app->dbofficial;
$img -> status = 0;
$transaction = $connection->beginTransaction();
try {
$img->save();
$res->save();
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
return false;
}
return true;
事务结束
7. 一些sql 语句
SQL可以使用IF(value,t,f) 语句, 例如if(salary>2000,'high','low') //工资大于2000是high, 低于2000是low
User::find()->where(['name' => '小伙儿'])->all(); 此方法返回 ['name' => '小伙儿'] 的所有数据;
Usermodel->find()->where(["like","字段名","查询值"])->one(); 模糊查询
User::find()->orderBy('id DESC')->all(); 此方法是排序查询;
User::findBySql('SELECT * FROM user')->all(); 此方法是用 sql 语句查询 user 表里面的所有数据;
User::find()->select('id,name')->where("status=1")->all(); //此方法为Yii2 查询指定字段
Customer::find()->where($condition)->asArray()->orderBy('id DESC')->all(); 根据条件以数组形式返回所有数据,并根据ID倒序;
User::findBySql('SELECT id,name FROM user')->one(); //此方法是用 sql 语句查询 user 表里面的一条数据;
findOne()->getAttribute('字段')
时间戳格式化:
Yii::$app->formatter->asDate();
Yii::$app->formatter->asDateTime();
设置默认时区配置文件里第三行
return [
'charset' => 'utf-8',
'language' => 'zh-CN',
'timeZone' => 'Asia/Shanghai', //看这里
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache'
],
'formatter' => [
'dateFormat' => 'yyyy-MM-dd',
'timeFormat' => 'HH:mm:ss',
'datetimeFormat' => 'yyyy-MM-dd HH:mm:ss'
]
]
];
跨域问题
header('Access-Control-Allow-Origin:*'); 跨域放在接口的index
查看接口输出
file_put_contents('D:/test.txt', print_r($data,true)); // 输出到文件中, 查看API的接收信息
SQL可以使用IF(value,t,f) 语句, 例如if(salary>2000,'high','low') //工资大于2000是high, 低于2000是low
User::find()->where(['name' => '小伙儿'])->all(); 此方法返回 ['name' => '小伙儿'] 的所有数据;
Usermodel->find()->where(["like","字段名","查询值"])->one(); 模糊查询
User::find()->orderBy('id DESC')->all(); 此方法是排序查询;
User::findBySql('SELECT * FROM user')->all(); 此方法是用 sql 语句查询 user 表里面的所有数据;
User::find()->select('id,name')->where("status=1")->all(); //此方法为Yii2 查询指定字段 Customer::find()->where($condition)->asArray()->orderBy('id DESC')->all(); 根据条件以数组形式返回所有数据,并根据ID倒序;
User::findBySql('SELECT id,name FROM user')->one(); //此方法是用 sql 语句查询 user 表里面的一条数据;
findOne()->getAttribute('字段')
Yii2几个要注意的小地方的更多相关文章
- SQL开发中容易忽视的一些小地方(五)
原文:SQL开发中容易忽视的一些小地方(五) 背景: 索引分类:众所周知,索引分为聚集索引和非聚集索引. 索引优点:加速数据查询. 问题:然而我们真的清楚索引的应用吗?你写的查询语句是否能充分应用上索 ...
- SQL开发中容易忽视的一些小地方(一)
原文:SQL开发中容易忽视的一些小地方(一) 写此系列文章缘由: 做开发三年来(B/S),发现基于web 架构的项目技术主要分两大方面: 第一:C#,它是程序的基础,也可是其它开发语言,没有开发语言也 ...
- SQL开发中容易忽视的一些小地方(二)
原文:SQL开发中容易忽视的一些小地方(二) 目的:继上一篇:SQL开发中容易忽视的一些小地方(一) 总结SQL中的null用法后,本文我将说说表联接查询. 为了说明问题,我创建了两个表,分别是学生信 ...
- SQL开发中容易忽视的一些小地方(六)
原文:SQL开发中容易忽视的一些小地方(六) 本文主旨:条件列上的索引对数据库delete操作的影响. 事由:今天在博客园北京俱乐部MSN群中和网友讨论了关于索引对delete的影响问题,事后感觉非常 ...
- SQL开发中容易忽视的一些小地方( 三)
原文:SQL开发中容易忽视的一些小地方( 三) 目的:这篇文章我想说说我在工作中关于in和union all 的用法. 索引定义 : 微软的SQL SERVER提供了两种索引:聚集索引(cluster ...
- SQL开发中容易忽视的一些小地方(四)
原文:SQL开发中容易忽视的一些小地方(四) 本篇我想针对网上一些对于非聚集索引使用场合的某些说法进行一些更正. 下面引用下MSDN对于非聚集索引结构的描述. 非聚集索引结构: 1:非聚集索引与聚集索 ...
- IOS 从一个小地方想到……
//(一个比较好的地方是 : cancel代表取消的意思,suspended,表示已经挂起,这些英文记住了用来命名挺好的,看看别人的过去时都是加ed的,就是这么强,所以语法不好的话,多关注ios的命名 ...
- java比.net优美的一个小地方
用了四年的.net,今年转做java,内心一直吐槽java的烦琐,今天发现了一个java值得我为之点赞的地方 java的枚举居然可以这么玩,废话不多,上demo package com.sunline ...
- [转载]c语言指针segmentation fault 指针常常错误的小地方
http://www.cnblogs.com/qingjoin/archive/2012/03/20/2408944.html #include <stdio.h> ] = ] = ] = ...
随机推荐
- 比较两个List是否相等,长度和内容都相等
/** *list中存在重复数据,且顺序不一样*/import java.util.ArrayList; import java.util.Collections; import java.util. ...
- Metasploit渗透测试实际应用
Metasploit:如何在 Metasploit 中使用反弹 Shell https://xz.aliyun.com/t/2380 Metasploit:如何使用 msfvenom https:// ...
- 《Java大学教程》—读后总结
1.坚持就是胜利. 中间启动了许多次,但又因为各种原因被停.就连闭关学习期间,也多次想放弃,总觉得太简单,最后还是选择了这本书而放弃了其他书,原因是马上要还书了,"书是非借不能读!" ...
- Rancher3----安装部署rancher
官方说:Rancher是使用一系列的Docker容器进行部署的.运行Rancher跟启动两个容器一样简单.一个容器作为管理服务器部署,另外一个作为集群节点的Agent部署 官方的意思是:学好docke ...
- 匆忙记录 编译linux kernel zImage
arm的板子. 自己要定制下内核. 下载源码 cp 模板配置 .config make menuconfig 进行定制化 之后make zImage {注意 交叉编译 gcc 也要配置的} 之后 ./ ...
- shallow clone
shallow clone 浅克隆经常在一些大型仓库中很有用——不用花费大量时间去clone一个完整的仓库,仅仅checkout出来某个分支(如master)的最新N次递交: git clone -- ...
- 008_Node中的require和import
一.js的对象的解构赋值 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuri ...
- wxWidgets 在 Windows 下开发环境配置
本文基于 CodeBlocks (16.01) 和 wxWidgets (3.0.2) 搭建 Windows 环境下 GUI 开发环境. 1. CodeBlocks 官网,下载最新版安装包 code ...
- 首页技术支持常见问题宽带外网IP显示为10、100、172开头,没有公网IP,如何解决?
1.表现形式: 路由器拨号获得的公网IP变成了一个以100开头的IP(或者是10.172开头),而打开ip138.com查询却又是另外一个IP,将100开头的这个IP到百度去查询下则显示所在区域为美国 ...
- Linux进程管理 (1)进程的诞生
专题:Linux进程管理专题 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 L ...