ホームページ > PHPフレームワーク > YII > Yii2でindexBy()を使用する方法

Yii2でindexBy()を使用する方法

angryTom
リリース: 2019-11-26 16:55:41
転載
2701 人が閲覧しました

Yii2でindexBy()を使用する方法

プロジェクト開発では、いくつかの特別な値が配列のインデックスとしてよく使用されます。通常、最初にデータをクエリしてから、配列をループ内で必要な形式。ただし、YII2 フレームワークは、より単純なメソッド IndexBy() を提供します。

all() メソッドを呼び出すと、連続する整数値でインデックス付けされた配列が返されます。
特定のフィールドまたは式の値をインデックス結果セット配列として使用したい場合があります。この目的を達成するには、all() を呼び出す前に、indexBy() メソッドを使用します。
例:

// 以uid作为key值
$query = User::find()
    ->select(['uid', 'name'])
    ->indexBy('uid')
    ->asArray()
    ->all();
ログイン後にコピー

クエリ結果は次のとおりです:

{
  "1001": {
    "uid": "1001",
    "name": "张三"
  },
  "1002": {
    "uid": "1002",
    "name": "李四"
  },
  "1003": {
    "uid": "1003",
    "name": "王五"
  }
}
ログイン後にコピー

式の値をインデックスとして使用する必要がある場合は、匿名関数を渡すだけで済みます。 IndexBy() メソッド:

// 以uid和name组合作为key值
$query = User::find()
    ->select(['uid', 'name'])
    ->indexBy(function ($row) {
        return $row['uid'] . $row['name'];   // row中使用的字段名只能是查询返回的字段名
    })
    ->asArray()
    ->all();
ログイン後にコピー

クエリ結果は次のとおりです:

{
  "1001张三": {
    "uid": "1001",
    "name": "张三"
  },
  "1002李四": {
    "uid": "1002",
    "name": "李四"
  },
  "1003王五": {
    "uid": "1003",
    "name": "王五"
  }
}
ログイン後にコピー

注: groupBy() や orderBy() などのクエリ メソッドとは異なり、これらはSQL クエリ ステートメントから使用され、このメソッド (indexBy) はデータベースがデータを取得した後にのみ有効になります。これは、それらの列名のみを SELECT クエリで使用できることを意味します。さらに、テーブル名接続を使用して customer.id などの列名を取得する場合、結果には id 列のみが含まれるため、テーブル名のプレフィックスを付けずに ->indexBy(‘id’) を呼び出す必要があります。

推奨: 「YII チュートリアル

以上がYii2でindexBy()を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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