ホームページ > PHPフレームワーク > YII > Yii フレームワークでのデータクエリ: データに効率的にアクセスする

Yii フレームワークでのデータクエリ: データに効率的にアクセスする

王林
リリース: 2023-06-21 11:22:39
オリジナル
1315 人が閲覧しました

Yii フレームワークは、Web アプリケーション開発のプロセスを簡素化するための多数のツールとコンポーネントを提供するオープンソースの PHP Web アプリケーション フレームワークであり、その重要なコンポーネントの 1 つがデータ クエリです。 Yii フレームワークでは、SQL に似た構文を使用してデータベースにアクセスし、データを効率的にクエリおよび操作できます。

Yii フレームワークのクエリビルダーには、主にアクティブ レコード クエリ、クエリ ビルダー クエリ、コマンド クエリ、独自の SQL クエリのタイプが含まれています。この記事では、初心者が Yii フレームワークでデータクエリを使用する方法をよりよく習得できるように、これらのクエリビルダーとその使用方法を 1 つずつ紹介します。

  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 Builder は、Yii フレームワークで一般的に使用されるもう 1 つのデータ アクセス メソッドであり、SQL クエリ ステートメントを構築するためのチェーン コール メソッドを提供します。複雑なクエリ要件。 Yii フレームワークでは、
    Yii::$app->db->createCommand()
  1. メソッドを使用してクエリ ビルダー オブジェクトを作成し、そのオブジェクトの一連のメソッドを使用してビルドできます。クエリステートメント。
以下はクエリ ビルダー クエリの例です:

//创建一个查询构建器对象,并构建查询语句
$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()
    メソッドを使用して Command オブジェクトを作成し、その後
  1. execute()
  2. を使用できます。 SQL ステートメントを実行するオブジェクトのメソッド。

以下はコマンド クエリの例です: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>//创建一个命令对象,并执行SQL语句 Yii::$app-&gt;db-&gt;createCommand() -&gt;update('post', ['status' =&gt; 1], 'author = &quot;admin&quot;') -&gt;execute();</pre><div class="contentsignin">ログイン後にコピー</div></div>この例では、最初に Yii::$app->db->createCommand()# を使用します。 ## メソッド Command オブジェクトを作成し、オブジェクトの update()

メソッドを使用して、

post

テーブル内のすべての

author を " に変更する更新ステートメントを構築しました。 admin "レコードのステータス属性は 1 に更新されます。最後に、execute() メソッドを使用して更新ステートメントを実行します。 元の SQL クエリ特殊なケースでは、アクティブ レコード、クエリ ビルダー、またはコマンド クエリでは処理できない複雑なクエリ ステートメントを実行する必要がある場合があります。現時点では SQL クエリを使用できます。 Yii フレームワークでは、Yii::$app->db->createCommand()

メソッドを使用して Command オブジェクトを作成し、その後
    setSql()
  1. を使用できます。オブジェクトのメソッド 元の SQL ステートメントを指定し、
  2. queryAll()
メソッドを使用してクエリを実行します。

以下は生の 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 サイトの他の関連記事を参照してください。

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