Heim > PHP-Framework > YII > So verwenden Sie indexBy() in Yii2

So verwenden Sie indexBy() in Yii2

angryTom
Freigeben: 2019-11-26 16:55:41
nach vorne
2768 Leute haben es durchsucht

So verwenden Sie indexBy() in Yii2

In der Projektentwicklung werden häufig einige spezielle Werte als Index des Arrays verwendet. Im Allgemeinen können die Daten zuerst abgefragt und dann das Array in das Array gespleißt werden erforderliches Format in einer Schleife. Das YII2-Framework bietet jedoch eine einfachere Methode indexBy().

Wenn Sie die all()-Methode aufrufen, gibt sie ein Array zurück, das durch aufeinanderfolgende ganzzahlige Werte indiziert ist.
Manchmal möchten Sie möglicherweise ein bestimmtes Feld oder einen bestimmten Ausdruckswert als Index-Ergebnissatz-Array verwenden. Dann können Sie die Methode indexBy() verwenden, bevor Sie all() aufrufen, um diesen Zweck zu erreichen.
Zum Beispiel lautet das Abfrageergebnis von

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

wie folgt:

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

Wenn Sie den Wert des Ausdrucks als Index verwenden müssen, müssen Sie nur eine anonyme Funktion übergeben zur indexBy()-Methode:

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

Die Abfrageergebnisse lauten wie folgt:

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

Hinweis: Im Gegensatz zu Abfragemethoden wie groupBy() oder orderBy() werden sie in einen Teil davon konvertiert Die SQL-Abfrageanweisung, und diese Methode (indexBy) wird ab verwendet. Sie wird erst wirksam, nachdem die Datenbank die Daten abgerufen hat. Das bedeutet, dass nur diese Spaltennamen in Ihrer SELECT-Abfrage verwendet werden können. Wenn Sie außerdem die Tabellennamenverbindung verwenden, um Spaltennamen abzurufen, z. B. customer.id, enthält das Ergebnis nur die ID-Spalte, sodass Sie ->indexBy(‘id’) ohne das Tabellennamenpräfix aufrufen müssen.

Empfohlen: „YII-Tutorial

Das obige ist der detaillierte Inhalt vonSo verwenden Sie indexBy() in Yii2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage