Maison  >  Article  >  cadre php  >  Comment utiliser indexBy() dans Yii2

Comment utiliser indexBy() dans Yii2

angryTom
angryTomavant
2019-11-26 16:55:412606parcourir

Comment utiliser indexBy() dans Yii2

Dans le développement de projets, certaines valeurs spéciales sont souvent utilisées comme index du tableau. Généralement, les données peuvent d'abord être interrogées, puis le tableau peut être intégré au tableau. format requis dans une boucle. Cependant, le framework YII2 fournit une méthode indexBy() plus simple.

Lorsque vous appelez la méthode all(), elle renverra un tableau indexé par des valeurs entières consécutives.
Parfois, vous souhaiterez peut-être utiliser un champ ou une valeur d'expression spécifique comme tableau de jeu de résultats d'index. Ensuite, vous pouvez utiliser la méthode indexBy() avant d'appeler all() pour atteindre cet objectif.
Par exemple, le résultat de la requête de

// 以uid作为key值
$query = User::find()
    ->select(['uid', 'name'])
    ->indexBy('uid')
    ->asArray()
    ->all();

est le suivant :

{
  "1001": {
    "uid": "1001",
    "name": "张三"
  },
  "1002": {
    "uid": "1002",
    "name": "李四"
  },
  "1003": {
    "uid": "1003",
    "name": "王五"
  }
}

Si vous devez utiliser la valeur de l'expression comme index, il vous suffit de passer une fonction anonyme à la méthode indexBy() :

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

Les résultats de la requête sont les suivants :

{
  "1001张三": {
    "uid": "1001",
    "name": "张三"
  },
  "1002李四": {
    "uid": "1002",
    "name": "李四"
  },
  "1003王五": {
    "uid": "1003",
    "name": "王五"
  }
}

Remarque : contrairement aux méthodes de requête telles que groupBy() ou orderBy(), elles seront converties en une partie de l'instruction de requête SQL, et cette méthode (indexBy) est utilisée à partir de Elle ne prend effet qu'une fois que la base de données a récupéré les données. Cela signifie que seuls ces noms de colonnes peuvent être utilisés dans votre requête SELECT. De plus, lorsque vous utilisez la connexion par nom de table pour obtenir des noms de colonnes, tels que customer.id, le résultat ne contiendra que la colonne id, vous devez donc appeler ->indexBy('id') sans le préfixe du nom de table.

Recommandé : "Tutoriel YII"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer