Yii使用DeleteAll連表刪除出現(xiàn)報(bào)錯(cuò)問(wèn)題的解決方法
本文實(shí)例講述了Yii使用DeleteAll連表刪除出現(xiàn)報(bào)錯(cuò)問(wèn)題的解決方法。分享給大家供大家參考,具體如下:
刪除數(shù)據(jù)的時(shí)候,經(jīng)常會(huì)遇到連聯(lián)判斷刪除數(shù)據(jù)的條件,今天用Yii 的CDbCriteria生成關(guān)連條件。批量刪除的時(shí)候數(shù)據(jù)庫(kù)報(bào)錯(cuò)。
頁(yè)面代碼為:
$criteria=new CDbCriteria;
$criteria->join = ' LEFT JOIN {{positions}} p ON p.zpo_id=t.zpo_id ';
$criteria->addCondition("p.zpo_type=1");
$criteria->addCondition("t.zpl_content_id in ($id)");
PosLog::model()->deleteAll($criteria);
錯(cuò)誤SQL為:
正確SQL語(yǔ)句應(yīng)為:
追溯到Y(jié)ii 基類(lèi):
framework/db/schema/CDbCommandBuilder.php#166
public function createDeleteCommand($table,$criteria)
{
$this->ensureTable($table);
$sql="DELETE FROM {$table->rawName}";
$sql=$this->applyJoin($sql,$criteria->join);
$sql=$this->applyCondition($sql,$criteria->condition);
$sql=$this->applyGroup($sql,$criteria->group);
$sql=$this->applyHaving($sql,$criteria->having);
$sql=$this->applyOrder($sql,$criteria->order);
$sql=$this->applyLimit($sql,$criteria->limit,$criteria->offset);
$command=$this->_connection->createCommand($sql);
$this->bindValues($command,$criteria->params);
return $command;
}
解決方案。修改基類(lèi)方法:
public function createDeleteCommand($table,$criteria,$alias='t')
{
$this->ensureTable($table);
$alias=$this->_schema->quoteTableName($alias);
if(empty($criteria->join)){
$sql="DELETE FROM {$table->rawName}";
}else{
$sql="DELETE $alias FROM {$table->rawName} $alias";
}
$sql=$this->applyJoin($sql,$criteria->join);
$sql=$this->applyCondition($sql,$criteria->condition);
$sql=$this->applyGroup($sql,$criteria->group);
$sql=$this->applyHaving($sql,$criteria->having);
$sql=$this->applyOrder($sql,$criteria->order);
$sql=$this->applyLimit($sql,$criteria->limit,$criteria->offset);
$command=$this->_connection->createCommand($sql);
$this->bindValues($command,$criteria->params);
return $command;
}
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Yii框架入門(mén)及常用技巧總結(jié)》、《php優(yōu)秀開(kāi)發(fā)框架總結(jié)》、《smarty模板入門(mén)基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。
- Yii實(shí)現(xiàn)單用戶(hù)博客系統(tǒng)文章詳情頁(yè)插入評(píng)論表單的方法
- yii用戶(hù)注冊(cè)表單驗(yàn)證實(shí)例
- yii2.0實(shí)現(xiàn)驗(yàn)證用戶(hù)名與郵箱功能
- 在yii中新增一個(gè)用戶(hù)驗(yàn)證的方法詳解
- 淺析Yii中使用RBAC的完全指南(用戶(hù)角色權(quán)限控制)
- PHP的Yii框架使用中的一些錯(cuò)誤解決方法與建議
- yiic命令時(shí)提示“php.exe”不是內(nèi)部或外部命令的解決方法
- Yii使用ajax驗(yàn)證顯示錯(cuò)誤messagebox的解決方法
- yii2.0之GridView自定義按鈕和鏈接用法
- Yii2搭建后臺(tái)并實(shí)現(xiàn)rbac權(quán)限控制完整實(shí)例教程
- Yii2.0高級(jí)框架數(shù)據(jù)庫(kù)增刪改查的一些操作
- Yii2針對(duì)游客、用戶(hù)防范規(guī)則和限制的解決方法分析
相關(guān)文章
PHP小白必須要知道的php基礎(chǔ)知識(shí)(超實(shí)用)
PHP是一 種被廣泛應(yīng)用的開(kāi)放源代碼的、基于服務(wù)器端的用于產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè) 的、可嵌入HTML中的腳本程序語(yǔ)言,尤其適合 WEB 開(kāi)發(fā)。下面給大家分享PHP小白必須要知道的php基礎(chǔ)知識(shí),超實(shí)用,感興趣的朋友一起學(xué)習(xí)吧2017-10-10
Laravel框架之blade模板新手入門(mén)教程及小技巧
Blade 是 laravel 提供的一個(gè)簡(jiǎn)單強(qiáng)大的模板引擎。下面這篇文章主要給大家介紹了關(guān)于Laravel框架之blade模板新手的入門(mén)教程以及一些使用的小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12
去掉destoon資訊內(nèi)容頁(yè)keywords關(guān)鍵字自帶的文章標(biāo)題的方法
這篇文章主要介紹了去掉destoon資訊內(nèi)容頁(yè)keywords關(guān)鍵字自帶的文章標(biāo)題的方法,有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-08-08
PHP使用imagick讀取PDF生成png縮略圖的兩種方法
這篇文章主要介紹了PHP使用imagick讀取PDF第一頁(yè)生成png縮略圖的兩種方法,使用了PHP擴(kuò)展php_imagick,需要的朋友可以參考下2014-03-03
本篇文章給大家分享一段代碼,php web木馬掃描器。需要的朋友直接復(fù)制代碼,就可以使用了,代碼超簡(jiǎn)單,附有注釋?zhuān)枰呐笥芽梢詤⒖枷?/div> 2015-09-09
PHP session 會(huì)話(huà)處理函數(shù)
這篇文章主要介紹了PHP session 會(huì)話(huà)處理函數(shù)的相關(guān)資料,需要的朋友可以參考下2016-06-06
thinkphp的URL路由規(guī)則與配置實(shí)例
這篇文章主要介紹了thinkphp的URL路由規(guī)則與配置方法,實(shí)例分析了ThinkPHP的路由規(guī)則及偽靜態(tài)設(shè)置方法,并分析了相關(guān)的注意事項(xiàng),是ThinkPHP開(kāi)發(fā)中非常重要的技巧,需要的朋友可以參考下2014-11-11最新評(píng)論

