首頁 後端開發 php教程 關於Yii基於數組和物件的Model查詢

關於Yii基於數組和物件的Model查詢

Jun 15, 2018 pm 01:58 PM
model yii 物件 陣列 查詢

這篇文章主要介紹了Yii基於數組和對象的Model查詢技巧,結合實例形式較為詳細的分析了Yii針對數組及對象的Model查詢使用技巧,需要的朋友可以參考下

#本文實例講述了Yii基於陣列和物件的Model查詢技巧。分享給大家供大家參考,具體如下:

對於一個Model Post 有如下的4中查詢方法,傳回物件或物件陣列。

//查找满足指定条件的结果中的第一行 find the first row satisfying the specified condition
$post=Post::model()->find($condition,$params);
//查找具有指定主键值的那一行 find the row with the specified primary key
$post=Post::model()->findByPk($postID,$condition,$params);
//查找具有指定属性值的行 find the row with the specified attribute values
$post=Post::model()->findByAttributes($attributes,$condition,$params);//未找到返回null
//通过指定的SQL 语句查找结果中的第一行 find the first row using the specified SQL statement
$post=Post::model()->findBySql($sql,$params);
登入後複製

如果find 方法找到了一個滿足查詢條件的行,它將傳回一個Post 實例,實例的屬性含有資料表行中對應列的值。然後我們就可以像讀取普通物件的屬性一樣讀取載入的值,例如echo $post->title;。如果使用給定的查詢條件在資料庫中沒有找到任何東西, find 方法將傳回null。

呼叫find 時,我們使用$condition 和$params 指定查詢條件。此處$condition 可以是SQL 語句中的WHERE 字串,$params 則是一個參數數組,其中的值應綁定到$condation 中的佔位符。例如:假設我們查詢postID = 10的資料

// find the row with postID=10
$post=Post::model()->find('postID=:postID', array(':postID'=>10));
登入後複製

條件$condition 就是我們sql裡的where部分,那參數怎麼辦呢,透過params傳遞,不過名字是加了":"的。

YII有個CDbCriteria類別可以建構查詢,如果我們查詢postId為10的title,CdbCriteria是這樣建構的

$criteria=new CDbCriteria;
$criteria->select='title'; // only select the 'title' column
$criteria->condition='postID=:postID';
$criteria->params=array(':postID'=>10);
$post=Post::model()->find($criteria); // $params is not needed
登入後複製

一種替代CDbCriteria 的方法是給find 方法傳遞一個陣列。陣列的鍵和值各自對應標準( criterion)的屬性名稱和值,上面的範例可以重寫為如下:

$post=Post::model()->find(array(
  'select'=>'title',
  'condition'=>'postID=:postID',
  'params'=>array(':postID'=>10),
));
登入後複製

當然也適用於findAll()

self::$_items[$type]=array();
$models=self::model()->findAll(array(
  'condition'=>'type=:type',
  'params'=>array(':type'=>$type),
  'order'=>'position',
));
登入後複製

當一個查詢條件是關於按指定的值來匹配幾個列時,我們可以使用findByAttributes()。我們讓$attributes 參數是一個以列名做索引的值的陣列。
findByAttributes 裡的$attributes就是字段的名字.查詢title為abc怎麼查詢呢?請看下面

Post::model()->findByAttributes(array('title'=>'abc'))
登入後複製

其它方法:

#1、$admin=Admin::model()->findAll($condition,$params);

該方法是根據一個條件來查詢一個集合,如:

findAll("username=:name",array(":name"=>$username));
登入後複製

#2、$admin=Admin::model()->findAllByPk($postIDs, $condition,$params);
findAllByPk($id,"name like ':name' and age=:age" ,array(':name'=>$name,'age'=> $age));
此方法是根據主鍵查詢一個集合,可以使用多個主鍵,如:

findAllByPk(array(1,2));
登入後複製

3、$admin=Admin::model()->findAllByAttributes ($attributes,$condition,$params);

該方法是根據條件查詢一個集合,可以是多個條件,把條件放到數組裡面,如:

findAllByAttributes(array('username'=>'admin'));
登入後複製

4、$admin=Admin::model()->findAllBySql($sql,$params);

此方法是根據SQL語句查詢一個陣列,如:

findAllBySql("select *from admin where username=:name",array(':name'=>'admin'));
登入後複製

二、查詢物件的方法

1、$admin=Admin::model()->findByPk($postID,$condition,$ params);

根據主鍵查詢出一個物件,如:

findByPk(1);
登入後複製

2、$row=Admin::model()->find($condition, $params);

根據一個條件查詢出一組數據,可能是多個,但是他只返回第一行數據,如:

find('username=:name',array(':name'=>'admin'));
登入後複製

#3、 $admin=Admin::model()->findByAttributes($attributes,$condition,$params);

該方法是根據條件查詢一組數據,可以是多個條件,把條件放到數組裡面,他查詢的也是第一個數據,如:

findByAttributes(array('username'=>'admin'));
登入後複製

4、$admin=Admin::model()->findBySql($sql,$params);

該方法是根據SQL語句查詢一組數據,他查詢的也是第一條數據,如:

findBySql("select *from admin where username=:name",array(':name'=>'admin'));
登入後複製

5、拼一個獲得SQL的方法,在根據find查詢出一個物件

$criteria=new CDbCriteria;
$criteria->select='username'; // only select the 'title' column
$criteria->condition='username=:username';
$criteria->params=array(':username=>'admin');
$post=Post::model()->find($criteria); // $params is not needed
登入後複製

三、查詢個數,判斷查詢是否有結果

1、$n=Post: :model()->count($condition,$params);

此方法是根據一個條件查詢一個集合有多少筆記錄,傳回一個int型數字,如

count("username=:name",array(":name"=>$username));
登入後複製

2、$n=Post::model()->countBySql($sql,$params);

此方法是根據SQL語句查詢一個集合有多少條記錄,傳回一個int型數字,如

countBySql("select *from admin where username=:name",array(':name'=>'admin'));
登入後複製

3、$exists=Post::model()->exists($condition,$params);
#該方法是根據一個條件查詢查詢得到的數組有沒有數據,如果有數據回傳一個true,否則沒有找到

四、添加的方法

$admin=new Admin;
$admin->username=$username;
$admin->password=$password;
if($admin->save()>0){
  echo "添加成功";
}else{
  echo "添加失败";
}
登入後複製

五、修改的方法

1、Post::model()->updateAll($attributes,$condition,$params);

#
$count = Admin::model()->updateAll(array('username'=>'11111','password'=>'11111'),'password=:pass',array(':pass'=>'1111a1'));
if($count>0){
  echo "修改成功";
}else{
  echo "修改失败";
}
登入後複製

2、Post::model()->updateByPk($pk,$attributes,$condition,$params);

#
$count = Admin::model()->updateByPk(1,array('username'=>'admin','password'=>'admin'));
$count = Admin::model()->updateByPk(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin'));
if($count>0){
  echo "修改成功";
}else{
  echo "修改失败";
}
登入後複製

$pk代表主键,可以是一个也可以是一个集合,$attributes代表是要修改的字段的集合,$condition代表条件,$params传入的值

3、Post::model()->updateCounters($counters,$condition,$params);

$count =Admin::model()->updateCounters(array('status'=>1),'username=:name',array(':name'=>'admin'));
if($count>0){
  echo "修改成功";
}else{
  echo "修改失败";
}
登入後複製

array('status'=>1)代表数据库中的admin表根据条件username='admin',查询出的所有结果status字段都自加1

六、删除的方法

1、Post::model()->deleteAll($condition,$params);

$count = Admin::model()->deleteAll('username=:name and password=:pass',array(':name'=>'admin',':pass'=>'admin'));
      $id=1,2,3
      deleteAll('id in(".$id.")');删除id为这些的数据
if($count>0){
  echo "删除成功";
}else{
  echo "删除失败";
}
登入後複製

2、Post::model()->deleteByPk($pk,$condition,$params);

$count = Admin::model()->deleteByPk(1);
$count = Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin'));
if($count>0){
  echo "删除成功";
}else{
  echo "删除失败";
}
登入後複製

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于Yii Framework框架获取分类下面的所有子类的方法

如何通过Yii框架使用魔术方法实现跨文件调用的功能  

以上是關於Yii基於數組和物件的Model查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用 foreach 迴圈移除 PHP 陣列中的重複元素? 如何使用 foreach 迴圈移除 PHP 陣列中的重複元素? Apr 27, 2024 am 11:33 AM

使用foreach循環移除PHP數組中重複元素的方法如下:遍歷數組,若元素已存在且當前位置不是第一個出現的位置,則刪除它。舉例而言,若資料庫查詢結果有重複記錄,可使用此方法移除,得到不含重複記錄的結果。

PHP數組深度複製的藝術:使用不同方法完美複製 PHP數組深度複製的藝術:使用不同方法完美複製 May 01, 2024 pm 12:30 PM

PHP中深度複製數組的方法包括:使用json_decode和json_encode進行JSON編碼和解碼。使用array_map和clone進行深度複製鍵和值的副本。使用serialize和unserialize進行序列化和反序列化。

PHP 陣列鍵值翻轉:不同方法的效能比較分析 PHP 陣列鍵值翻轉:不同方法的效能比較分析 May 03, 2024 pm 09:03 PM

PHP數組鍵值翻轉方法效能比較顯示:array_flip()函數在大型數組(超過100萬個元素)下比for迴圈效能更優,耗時更短。手動翻轉鍵值的for迴圈方法耗時相對較長。

如何將 MySQL 查詢結果陣列轉換為物件? 如何將 MySQL 查詢結果陣列轉換為物件? Apr 29, 2024 pm 01:09 PM

將MySQL查詢結果陣列轉換為物件的方法如下:建立一個空物件陣列。循環結果數組並為每一行建立一個新的物件。使用foreach迴圈將每一行的鍵值對賦給新物件的對應屬性。將新物件加入到物件數組中。關閉資料庫連線。

PHP數組多維排序實戰:從簡單到複雜場景 PHP數組多維排序實戰:從簡單到複雜場景 Apr 29, 2024 pm 09:12 PM

多維數組排序可分為單列排序和嵌套排序。單列排序可使用array_multisort()函數依列排序;巢狀排序需要遞歸函數遍歷陣列並排序。實戰案例包括按產品名稱排序和按銷售量和價格複合排序。

PHP 數組分組函數在資料整理的應用 PHP 數組分組函數在資料整理的應用 May 04, 2024 pm 01:03 PM

PHP的array_group_by函數可依鍵或閉包函數將陣列中的元素分組,傳回關聯數組,其中鍵為組名,值是屬於該組的元素數組。

深度複製PHP數組的最佳實踐:探索高效的方法 深度複製PHP數組的最佳實踐:探索高效的方法 Apr 30, 2024 pm 03:42 PM

在PHP中執行陣列深度複製的最佳實踐是:使用json_decode(json_encode($arr))將陣列轉換為JSON字串,然後再轉換回陣列。使用unserialize(serialize($arr))將陣列序列化為字串,然後將其反序列化為新陣列。使用RecursiveIteratorIterator迭代器對多維數組進行遞歸遍歷。

PHP 函數如何傳回物件? PHP 函數如何傳回物件? Apr 10, 2024 pm 03:18 PM

PHP函數可以透過使用return語句後接物件實例來傳回對象,從而將資料封裝到自訂結構中。語法:functionget_object():object{}。這允許創建具有自訂屬性和方法的對象,並以對象的形式處理資料。

See all articles