本人新手, 刚接触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几个要注意的小地方的更多相关文章

  1. SQL开发中容易忽视的一些小地方(五)

    原文:SQL开发中容易忽视的一些小地方(五) 背景: 索引分类:众所周知,索引分为聚集索引和非聚集索引. 索引优点:加速数据查询. 问题:然而我们真的清楚索引的应用吗?你写的查询语句是否能充分应用上索 ...

  2. SQL开发中容易忽视的一些小地方(一)

    原文:SQL开发中容易忽视的一些小地方(一) 写此系列文章缘由: 做开发三年来(B/S),发现基于web 架构的项目技术主要分两大方面: 第一:C#,它是程序的基础,也可是其它开发语言,没有开发语言也 ...

  3. SQL开发中容易忽视的一些小地方(二)

    原文:SQL开发中容易忽视的一些小地方(二) 目的:继上一篇:SQL开发中容易忽视的一些小地方(一) 总结SQL中的null用法后,本文我将说说表联接查询. 为了说明问题,我创建了两个表,分别是学生信 ...

  4. SQL开发中容易忽视的一些小地方(六)

    原文:SQL开发中容易忽视的一些小地方(六) 本文主旨:条件列上的索引对数据库delete操作的影响. 事由:今天在博客园北京俱乐部MSN群中和网友讨论了关于索引对delete的影响问题,事后感觉非常 ...

  5. SQL开发中容易忽视的一些小地方( 三)

    原文:SQL开发中容易忽视的一些小地方( 三) 目的:这篇文章我想说说我在工作中关于in和union all 的用法. 索引定义 : 微软的SQL SERVER提供了两种索引:聚集索引(cluster ...

  6. SQL开发中容易忽视的一些小地方(四)

    原文:SQL开发中容易忽视的一些小地方(四) 本篇我想针对网上一些对于非聚集索引使用场合的某些说法进行一些更正. 下面引用下MSDN对于非聚集索引结构的描述. 非聚集索引结构: 1:非聚集索引与聚集索 ...

  7. IOS 从一个小地方想到……

    //(一个比较好的地方是 : cancel代表取消的意思,suspended,表示已经挂起,这些英文记住了用来命名挺好的,看看别人的过去时都是加ed的,就是这么强,所以语法不好的话,多关注ios的命名 ...

  8. java比.net优美的一个小地方

    用了四年的.net,今年转做java,内心一直吐槽java的烦琐,今天发现了一个java值得我为之点赞的地方 java的枚举居然可以这么玩,废话不多,上demo package com.sunline ...

  9. [转载]c语言指针segmentation fault 指针常常错误的小地方

    http://www.cnblogs.com/qingjoin/archive/2012/03/20/2408944.html #include <stdio.h> ] = ] = ] = ...

随机推荐

  1. May 27. 2018 Week 22nd Sunday

    All things come to those who wait. 苍天不负有心人. It is said that those who are patient can see what their ...

  2. 关于折半法查找的一些总结以及ArrayList类的总结

    一.折半法查找的总结(这算法很好理解,但我花了好久琢磨他有啥用.....) 1.实际意义 折半法查找主要是为了能够很快在一个数组中找出我们所需要的那个元素,与往常我们通过一个一个比较的方法不同,折半法 ...

  3. C - 继续畅通工程 最小生成树

    省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经 ...

  4. 51nod 1238 最小公倍数之和 V3

    51nod 1238 最小公倍数之和 V3 求 \[ \sum_{i=1}^N\sum_{j=1}^N lcm(i,j) \] \(N\leq 10^{10}\) 先按照套路推一波反演的式子: \[ ...

  5. js 文件引用传递参数

    每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code (function() {var hm = document.createElement(&q ...

  6. Python:Day52 urls

    Django的2.0版本之后使用新的规则,之前的url变成了path,如果要使用正则还需要引入re_path from django.urls import path,re_path urlpatte ...

  7. (1)ESP8266微信门铃

    http://rayuu.com/2017/11/13/esp8266-wechat-doorbell/(留做参考) 就是当门铃按键按下,微信会收到消息提醒. 若在家就算了,没在家会受到远程提示. 自 ...

  8. PHP中静态变量和函数引用返回

    这两天看看PHP写的框架CI,源代码中写了很多静态变量和函数引用. 官方文档地址:http://php.net/manual/zh/language.references.return.php 简单写 ...

  9. Java线程池实现原理与技术(ThreadPoolExecutor、Executors)

    本文将通过实现一个简易的线程池理解线程池的原理,以及介绍JDK中自带的线程池ThreadPoolExecutor和Executor框架. 1.无限制线程的缺陷 多线程的软件设计方法确实可以最大限度地发 ...

  10. MySQL定时备份数据库(全库备份)

    一.MySQL数据备份 1.1. mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump ...