Yii2几个要注意的小地方
本人新手, 剛接觸Yii, 記錄下遇到的坑, 大神請繞道/
1.?
//插入數(shù)據(jù)到數(shù)據(jù)庫, 需要 new 一下,設(shè)置屬性;
$info = new BasicInfo();
$info -> setAttributes($data);
new 之后 ?這里 $data 就可以是一個(gè)數(shù)組
但如果是更新數(shù)據(jù)的話(不new), 只能一個(gè)一個(gè)壓入數(shù)據(jù). ?//如果不對的話, 請吐槽, 必須吐槽!~
$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 參數(shù), 關(guān)閉數(shù)據(jù)庫的驗(yàn)證, 貌似實(shí)在model中的驗(yàn)證規(guī)則,
if(!$res->save(false)) { $this->setError($res->getErrors()); return false; }?
2. 關(guān)于數(shù)據(jù)庫連貫操作 ->asArray(); ? 可以加參數(shù)true, 但是加不加有什么區(qū)別??
asArray() ?只能在model的查詢中使用, 很多時(shí)候還是建議大家加上asAaary(), 不然特別是列表的時(shí)候. 容易報(bào)錯(cuò)
我曾經(jīng)因?yàn)檫@個(gè)弱智問題糾結(jié)了半天.//../
3. 從來沒想過 like 竟然可以多個(gè)連起來用
? ? ?Yii 用sql的原生語句, 關(guān)于多個(gè)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, 其他用execute4. 用select別名, 只需要在model文件中把想用的別名設(shè)置為public屬性/
比如select('goods_id as gid') ?去model中設(shè)置 ?public $gid, ?就可以用了
貌似必須用->asArraay() ?這個(gè)連貫操作, ?不然會報(bào)錯(cuò).?
5. ?joinwith 聯(lián)查實(shí)例
$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中添加如下代碼, 告訴系統(tǒng)兩者之間的關(guān)系,?
public function getUser()
{
return $this->hasOne(User::className(), ['id' => 'user_id']);
}
看下面
->joinWith('user',false)
這里如果你忘了加 false參數(shù), 那么你可能跟我一樣傻逼半個(gè)鐘頭, 雖然查出來的數(shù)據(jù)都對, 但是有個(gè)子數(shù)組, 看著很惡心, 如果鍵名重復(fù), 查詢結(jié)果還會受到影響
6.?
事務(wù) 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; 事務(wù)結(jié)束?
7. 一些sql 語句
SQL可以使用IF(value,t,f) 語句, 例如if(salary>2000,'high','low') //工資大于2000是high, 低于2000是low User::find()->where(['name' => '小伙兒'])->all(); 此方法返回 ['name' => '小伙兒'] 的所有數(shù)據(jù);Usermodel->find()->where(["like","字段名","查詢值"])->one(); 模糊查詢User::find()->orderBy('id DESC')->all(); 此方法是排序查詢;User::findBySql('SELECT * FROM user')->all(); 此方法是用 sql 語句查詢 user 表里面的所有數(shù)據(jù);User::find()->select('id,name')->where("status=1")->all(); //此方法為Yii2 查詢指定字段 Customer::find()->where($condition)->asArray()->orderBy('id DESC')->all(); 根據(jù)條件以數(shù)組形式返回所有數(shù)據(jù),并根據(jù)ID倒序;User::findBySql('SELECT id,name FROM user')->one(); //此方法是用 sql 語句查詢 user 表里面的一條數(shù)據(jù); findOne()->getAttribute('字段')?
時(shí)間戳格式化:Yii::$app->formatter->asDate();Yii::$app->formatter->asDateTime();設(shè)置默認(rèn)時(shí)區(qū)配置文件里第三行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' => '小伙兒'] 的所有數(shù)據(jù);
? ? Usermodel->find()->where(["like","字段名","查詢值"])->one(); ?模糊查詢
? ? User::find()->orderBy('id DESC')->all(); ? 此方法是排序查詢;
? ? User::findBySql('SELECT * FROM user')->all(); ?此方法是用 sql ?語句查詢 user 表里面的所有數(shù)據(jù);
? ? User::find()->select('id,name')->where("status=1")->all(); //此方法為Yii2 查詢指定字段? ? ?? ? Customer::find()->where($condition)->asArray()->orderBy('id DESC')->all(); ? ?根據(jù)條件以數(shù)組形式返回所有數(shù)據(jù),并根據(jù)ID倒序;
? ? User::findBySql('SELECT id,name FROM user')->one(); ?//此方法是用 sql ?語句查詢 user 表里面的一條數(shù)據(jù);
? ? findOne()->getAttribute('字段')
轉(zhuǎn)載于:https://www.cnblogs.com/lz0925/p/7687617.html
總結(jié)
以上是生活随笔為你收集整理的Yii2几个要注意的小地方的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux设置永久别名
- 下一篇: 第七次团队作业——日不落战队