本人新手, 刚接触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. Unity基础(5) Shadow Map 概述

    这篇是自己看shadow map是的一些笔记,内容稍稍凌乱,如有错误请帮忙纠正 1.常见阴影处理方式 Shadow Map : using Z-Buffer Shadow Mapping 的原理与实践 ...

  2. C语言 实现逆置功能

    C语言 实现逆置功能 //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 字符串的逆置 方法1:利用数组 #include<stdio.h> ...

  3. vue使用JS的形式进行路由导航

    // 注意: 一定要区分 this.$route 和 this.$router 这两个对象, // 其中: this.$route 是路由[参数对象],所有路由中的参数, params, query ...

  4. CSS 浮动(float)与定位(position)

    一.浮动 1.三个属性:left.right.none. 2.特点:容易造成父项塌陷,故在父项需要清除浮动 3.父项塌陷现象 4.父项塌陷解决方案(建议使用):清除浮动 .parent:after{ ...

  5. Nginx使用教程(四):提高Nginx网络吞吐量之buffers优化

    请求缓冲区在NGINX请求处理中起着重要作用. 在接收到请求时,NGINX将其写入这些缓冲区. 这些缓冲区中的数据可作为NGINX变量使用,例如$request_body. 如果缓冲区与请求大小相比较 ...

  6. 前端数据库——WebSQL和IndexedDB

    一.WebSQL WebSQL是前端的一个独立模块,是web存储方式的一种,我们调试的时候会经常看到,只是一般很少使用.并且,当前只有谷歌支持,ie和火狐均不支持. 我们对数据库的一般概念是后端才会跟 ...

  7. A1制作文件夹目录

    第一步 在文件夹目录下建立bat文件,填写以下内容: dir *.* /B >目录.txt 最后双击bat文件. 第二步 运行后复制目录.txt文件内容到空白excel 使用hyperlink函 ...

  8. [HEOI2016/TJOI2016]字符串

    嘟嘟嘟 今天复习一下SAM. lcp固然不好做,干脆直接翻过来变成后缀.首先答案一定满足单调性,所以我们二分lcp的长度\(mid\),然后判断\(s[d \ldots d + mid - 1]\)是 ...

  9. Python:Day20 模块

    模块是用来组织函数的. 模块一共3种: python标准库 第三方模块 应用程序自定义模块 模块搜索路径:sys.path import sys print(sys.path) import calc ...

  10. 转载 mvc:message-converters简单介绍 https://www.cnblogs.com/liaojie970/p/7736098.html

    mvc:message-converters简单介绍 说说@ResponseBody注解,很明显这个注解就是将方法的返回值作为reponse的body部分.我们进一步分析下这个过程涉及到的内容,首先就 ...