ホームページ >PHPフレームワーク >YII >Yii フレームワークでのデータクエリ: データに効率的にアクセスする
Yii フレームワークは、Web アプリケーション開発のプロセスを簡素化するための多数のツールとコンポーネントを提供するオープンソースの PHP Web アプリケーション フレームワークであり、その重要なコンポーネントの 1 つがデータ クエリです。 Yii フレームワークでは、SQL に似た構文を使用してデータベースにアクセスし、データを効率的にクエリおよび操作できます。
Yii フレームワークのクエリビルダーには、主にアクティブ レコード クエリ、クエリ ビルダー クエリ、コマンド クエリ、独自の SQL クエリのタイプが含まれています。この記事では、初心者が Yii フレームワークでデータクエリを使用する方法をよりよく習得できるように、これらのクエリビルダーとその使用方法を 1 つずつ紹介します。
アクティブ レコード モードは、Yii フレームワークで最も一般的に使用されるデータ アクセス モードの 1 つであり、次のことを可能にするオブジェクト指向インターフェイスを提供します。オブジェクト指向のインスタンスと同じように、データベース内のデータを操作します。 Yii フレームワークでは、各 Active Record クラスがデータベース テーブルに対応し、クラスの静的メソッドを呼び出すことでテーブル内のデータにアクセスできます。
以下はアクティブ レコード クエリの例です:
//创建一个Active Record对象 $post = Post::findOne(1); //输出该对象的属性 echo $post->title;
この例では、まず findOne()## を使用して
Post クラスを作成します。 # メソッド 属性のインスタンス。
実際の開発では、通常、データのフィルタリング、並べ替え、ページングなどの操作を実行する必要があります。 Yii フレームワークは、これらの関数を実装するための豊富なメソッドを提供します。たとえば、
where() メソッドを使用してフィルター条件を追加し、
orderBy()
limit() メソッドを使用できます。返されるレコードの数を制限するメソッド。
offset() メソッドを使用して、返されるレコードの開始位置を指定します。以下に例を示します。
//查询标题包含“Yii”并且作者为“admin”的文章,并按照发布时间倒序排序,返回前10条记录 $posts = Post::find()->where(['like', 'title', 'Yii']) ->andWhere(['author' => 'admin']) ->orderBy(['created_at' => SORT_DESC]) ->limit(10) ->offset(0) ->all();
この例では、
find() メソッドを使用してアクティブ レコード クエリ オブジェクトを作成し、次に
where() を使用します。 andWhere() メソッドは、タイトルに「Yii」が含まれ、作成者が「admin」という 2 つのフィルター条件を追加します。
orderBy() メソッドは、ソートを指定するために使用されます。リリース時間の逆順;
limit() メソッドを使用して、返されるレコードの数を 10 に制限します;
offset() メソッドを使用して、返されるレコードの開始位置を指定します0件のレコード。最後に、
all() メソッドを使用してクエリを実行し、要件を満たすすべてのレコードを返します。
Query BuilderQuery
//创建一个查询构建器对象,并构建查询语句 $query = Yii::$app->db->createCommand() ->select('id, title, content') ->from('post') ->where(['like', 'title', 'Yii']) ->andWhere(['author' => 'admin']) ->orderBy(['created_at' => SORT_DESC]) ->limit(10) ->offset(0); //执行查询,并返回结果集 $posts = $query->queryAll();
この例では、最初に
Yii::$app->db->createCommand()# を使用します。 ## このメソッドはクエリ ビルダー オブジェクトを作成し、オブジェクトの select()、
from()、where()
、andWhere() を使用します。
、orderBy()
、limit()
、offset()
などのメソッドは、クエリ ステートメントの構築に使用されます。最後に、queryAll()
メソッドを使用してクエリを実行し、要件を満たすすべてのレコードを返します。 クエリ ビルダーとアクティブ レコードの最大の違いは、クエリ ビルダーではモデル クラスを定義する必要がないため、統計クエリなどの単純なクエリ シナリオに適していることです。
コマンドクエリ
コマンドクエリは、Yii フレームワークで最も独創的なデータアクセスメソッドであり、このメソッドを使用して、データを返す必要のない一部のデータベース操作を実行できます。結果セット。更新、削除、挿入など。 Yii フレームワークでは、
Yii::$app->db->createCommand()以下はコマンド クエリの例です: <pre class='brush:php;toolbar:false;'>//创建一个命令对象,并执行SQL语句
Yii::$app->db->createCommand()
->update('post', ['status' => 1], 'author = "admin"')
->execute();</pre>
この例では、最初に Yii::$app->db->createCommand()# を使用します。 ## メソッド Command オブジェクトを作成し、オブジェクトの
update()
post
テーブル内のすべてのauthor を " に変更する更新ステートメントを構築しました。 admin "レコードのステータス属性は 1 に更新されます。最後に、
execute() メソッドを使用して更新ステートメントを実行します。
元の SQL クエリ
特殊なケースでは、アクティブ レコード、クエリ ビルダー、またはコマンド クエリでは処理できない複雑なクエリ ステートメントを実行する必要がある場合があります。現時点では SQL クエリを使用できます。 Yii フレームワークでは、
Yii::$app->db->createCommand()
以下は生の SQL クエリの例です:
//创建一个命令对象,并执行原始SQL查询 $connection = Yii::$app->db; $command = $connection->createCommand(" SELECT p.id, p.title, u.username FROM post p LEFT JOIN user u ON p.author_id = u.id WHERE p.status = 1 AND u.role = 'admin' ORDER BY p.created_at DESC LIMIT 10 OFFSET 0 "); $posts = $command->queryAll();
这个例子中,我们首先创建了一个Command对象,并使用setSql()
方法指定一条原始的SQL查询语句。该语句将post
表和user
表进行左连接,查询出所有状态为1且用户角色为“admin”的文章,并按照发布时间倒序排序,返回前10条记录。最后,我们使用queryAll()
方法执行该查询,并返回所有符合要求的记录。
总结:
在Yii框架中,我们可以使用多种方式来访问数据库中的数据,包括Active Record查询、Query Builder查询、命令查询和原始SQL查询。不同的查询构建器适用于不同的查询场景,我们需要根据实际需求来选择最合适的查询方式。通过本文的介绍,相信读者已经对Yii框架中的数据查询有了更深入的了解,希望对大家在实际开发中使用Yii框架有所帮助。
以上がYii フレームワークでのデータクエリ: データに効率的にアクセスするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。