PDO メソッド (複数テーブル接続クエリに適しています)。 (推奨学習: yii フレームワーク)
$sql = "";//原生态sql语句 xx::model()->dbConnection->createCommand($sql)->execute(); 非select语句(update、insert、delete) xx::model()->dbConnection->createCommand($sql)->queryRow(); 查询select一条记录 xx::model()->dbConnection->createCommand($sql)->queryAll(); 查询select多条记录 $sql = "select a.*, count(b.role_id)as num from {{user_role}} a left join {{user}} b on a.id = b.role_id group by b.role_id order by a.id"; $user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); $this->render("list", array('user_role_info'=>$user_role_info));
例
$sql = "select a.*, count(b.role_id)as num from slgo_user_role a left join slgo_user b on a.id = b.role_id group by b.role_id order by a.id"; $user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); $this->render("list", array('user_role_info'=>$user_role_info));
Active Recordメソッド
(1)New
$post=new Post; $post->title='sample post'; $post->content='post body content'; $post->save();
Criteria メソッド
$condition を使用して、より複雑なクエリ条件を指定することもできます。文字列を使用する代わりに、$condition を CDbCriteria のインスタンスにすることができます。これにより、WHERE に限定されない条件を指定できます。
$criteria=new CDbCriteria; $criteria->select='title'; // 只选择 'title' 列 $criteria->condition='postID=:postID'; $criteria->params=array(':postID'=>10); $post=Post::model()->find($criteria);
CDbCriteria の代わりに、配列を find メソッドに渡すこともできます。配列のキーと値は、それぞれ条件
の属性名と値に対応します。上記の例は、次のように書き換えることができます:
$post=Post::model()->find(array( 'select'=>'title', 'condition'=>'postID=:postID', 'params'=>array(':postID'=>10), ));
クエリ条件がプレスに関するものである場合 指定された値が複数の列に一致する場合は、findByAttributes() を使用できます。 $attributes パラメータを列名でインデックス付けされた値の配列にします。
一部のフレームワークでは、このタスクは findByNameAndTitle などのメソッドを呼び出すことで実現できます。
このアプローチは魅力的に見えますが、混乱や競合、列名の大文字と小文字の区別などの問題を引き起こすことがよくあります。
クエリ ビルダー メソッド
$user = Yii::app()->db->createCommand() ->select('id, username, profile') ->from('tbl_user u') ->join('tbl_profile p', 'u.id=p.user_id') ->where('id=:id', array(':id'=>$id)) ->queryRow();
1. ActiveRecord を有効に活用するとき、つまり、2 番目の SQL クエリ メソッドを生成させないでください。私の経験から言えば、次のようにします。無理をせず、タイムとパフォーマンスの差に注意してください。ビッグデータクエリの場合、メモリスペースの観点から、yii2 の toArray() を使用してメモリ消費を節約できます。
2. PDO に対する ActiveRecord の利点は、その利便性にあります。
1 つは、SQL ステートメントを作成する場合と比較して、ActiveRecord を使用する方が簡単であり、さらに重要なことに、エラーが発生しにくいということです。
第 2 に、パラメータのフィルタリング、バインドなど、SQL ステートメントを超えた多くの利便性が提供されます。 Web 開発では必ず遭遇する問題ですが、SQL ステートメントを次々と記述するため、コードの再利用度は高くなく、どこかでフィルタリングすることを忘れやすく、セキュリティ リスクが発生します。
3. Yii2 にはすでに Query があり、ActiveRecord よりもパフォーマンスが優れており、代替として使用できます。もちろん、利便性と効率性は表裏の関係にあり、その使用方法は ActiveRecord ほど便利ではありません。
しかし、プロジェクトでの私の経験では、Query は ActiveRecord よりも使用頻度がわずかに低いだけです。個人的には、Query/ActiveQuery は Yii2 で導入されたエキサイティングな新機能だと思います。
4. 前回の記事では、ActiveRecord のアプリケーション シナリオについて説明しました。 PDO を使用する場合は、明確に記述できない 1 つまたは 2 つの文など、より複雑な SQL 操作に使用する必要があります。
この場合、ActiveRecord を使用してビルドすることは、SQL を直接記述するのと同じくらい複雑であるため、PDO の使用を検討できます。ただ私の印象では、プロジェクトで使用するSQL文が非常に複雑な場合はDB Viewやストアドプロシージャとして記述することになるため、PDOはあまり使われていない、あるいはごくわずかと言えるような気がします。
5. 効率を追求する場合、後のメンテナンスが非常に困難になるため、PDO はあまり使用すべきではないと個人的には考えています。代わりに、SQL クエリの最適化、インデックスとテーブル構造の最適化、キャッシュの使用などを検討できます。キャッシュの使用が最も簡単で、最も直接的で、最も効果的な方法であることは言及する価値があります。
6. パフォーマンスの問題を時期尚早に検討する必要はありません
以上がyii でデータベースに接続するにはいくつかの方法がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。