ホームページ バックエンド開発 PHPチュートリアル 配列とオブジェクトに基づく Yii モデルクエリについて

配列とオブジェクトに基づく Yii モデルクエリについて

Jun 15, 2018 pm 01:58 PM
model yii 物体 配列 お問い合わせ

この記事では、主に配列とオブジェクトに基づく Yii のモデル クエリ手法を紹介します。サンプル フォームに基づいて Yii のモデル クエリ手法を詳細に分析します。

サンプル フォームを参照してください。この記事では、Yii の配列ベースおよびオブジェクトベースのモデルクエリ手法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。

モデル ポストの場合、オブジェクトまたはオブジェクト配列を返す次の 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 でタイトルをクエリすると、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 の代わりに、配列を検索に渡すこともできます。方法。配列のキーと値は、それぞれ条件の属性名と値に対応します。上記の例は次のように書き換えることができます。

$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 はフィールドの名前です。タイトルが 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);

このメソッド

findAllBySql("select *from admin where username=:name",array(':name'=>'admin'));
ログイン後にコピー

2 のような SQL ステートメントに基づいて配列をクエリすることです。$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 のように、最初のデータもクエリします。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
ログイン後にコピー

に基づいてオブジェクトをクエリするメソッドをまとめます。 3. 数値をクエリし、クエリの結果があるかどうかを判断します。

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

このメソッドは、条件に基づいてコレクション内のレコード数をクエリし、

count("username=:name",array(":name"=>$username));
ログイン後にコピー
2, $n=Post:: などの int 型の数値を返します。 model()->countBySql($sql,$params);

このメソッドは、SQL ステートメント Record に基づいてコレクション内の項目数をクエリし、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 "添加失败";
}
ログイン後にコピー
## を追加します。 # 5. 変更方法

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 モデルクエリについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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配列グループ化機能の応用 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 29, 2024 pm 02:39 PM

PHP では、配列は順序付けられたシーケンスであり、要素はインデックスによってアクセスされます。オブジェクトは、new キーワードによって作成されたプロパティとメソッドを持つエンティティです。配列へのアクセスはインデックス経由で、オブジェクトへのアクセスはプロパティ/メソッド経由で行われます。配列値が渡され、オブジェクト参照が渡されます。

PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで Apr 29, 2024 pm 09:12 PM

多次元配列のソートは、単一列のソートとネストされたソートに分類できます。単一列のソートでは、array_multisort() 関数を使用して列ごとにソートできますが、ネストされたソートでは、配列を走査してソートするための再帰関数が必要です。具体的な例としては、製品名による並べ替えや、売上数量や価格による化合物の並べ替えなどがあります。

See all articles