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

不言
リリース: 2023-04-01 10:00:01
オリジナル
1538 人が閲覧しました

この記事では、主に配列とオブジェクトに基づく 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート