it-swarm-id.com

db_select () mengembalikan array

Saya baru saja mulai menggunakan Drupal 7 dan db_select().

jika saya mendapatkan hasil dari db_select() (mis. $result = $query->execute(), mengapa saya hanya bisa mengulang hasil ini sekali saja?

Tampaknya ada kursor yang tidak diatur ulang mengikuti loop foreach.

Jadi saya mencoba menemukan fungsi yang akan mengubah hasil ini menjadi array multi dimensi (mis. $result = $result->fetchAllAssoc()) tetapi saya tidak menemukan apa pun.

Sebagai gantinya, saat ini saya harus mengulang hasil untuk membuat array objek baris untuk digunakan nanti melalui kode (jika saya perlu mengulanginya lebih dari sekali)

/* this returns an array of row objects that you can use like any other array but seems as though there should be an API function to do this for me as part of the database class ? */

$array = array();
foreach($result as $row) {
  $array[] = $row;
}

Tentunya harus ada fungsi API untuk melakukan ini.

3
TomGould

Saya tidak punya Drupal 7 dev lingkungan berguna untuk mencoba ini, tapi saya pikir Anda sedang mencari fetchAllAssoc () , seperti yang Anda sebutkan. Halaman ini memiliki beberapa contoh permintaan yang membantu.

Ketika Anda memanggil fetchAllAssoc(), Anda perlu menentukan nama bidang sebagai kunci utama array, seperti:

 $result->fetchAllAssoc($field);

Tampaknya juga fetchAll () akan berfungsi (tetapi ternyata itu bukan solusi yang disarankan).

10
hross

Ya ada masalah dengan fetchAll () atau fetchAssoc () yang belum Anda gunakan, baik itu eksekusi saja () akan memberi Anda hanya satu hasil yang akan menjadi sesuatu seperti di bawah ini

[dbh] => DatabaseConnection_mysql Object
    (
        [shutdownRegistered:protected] => 
        [target:protected] => default
        [key:protected] => default
        [logger:protected] => 
        [transactionLayers:protected] => Array
            (
            )

        [driverClasses:protected] => Array
            (
                [SelectQuery] => SelectQuery
                [UpdateQuery] => UpdateQuery
                [InsertQuery] => InsertQuery_mysql
            )

        [statementClass:protected] => DatabaseStatementBase
        [transactionSupport:protected] => 1
        [transactionalDDLSupport:protected] => 
        [temporaryNameIndex:protected] √ 0
        [connectionOptions:protected] => Array
            (
                [database] => pcl
                [username] => inhouse
                [password] => abcd!234
                [Host] => localhost
                [port] => 
                [driver] => mysql
                [prefix] => Array
                    (
                        [default] => 
                    )

            )

        [schema:protected] => 
        [prefixes:protected] => Array
            (
                [default] => 
            )

        [prefixSearch:protected] => Array
            (
                [0] => {
                [1] => }
            )

        [prefixReplace:protected] => Array
            (
                [0] => 
                [1] => 
            )

    )

    [queryString] => SELECT u.uid AS uid, u.name AS name
      FROM profile p
      INNER JOIN users_roles ur ON p.uid = ur.uid
      INNER JOIN field_data_field_client fcl ON p.pid = fcl.entity_id
      INNER JOIN field_data_field_category fca ON p.pid = fca.entity_id
      INNER JOIN users u ON p.uid= u.uid
      WHERE  (ur.rid = :db_condition_placeholder_0) AND (fca.field_category_tid = :db_condition_placeholder_1) AND (fca.bundle = :db_condition_placeholder_2) AND (fcl.field_client_tid = :db_condition_placeholder_3) 
      GROUP BY ur.uid
    )

Jadi solusinya adalah menggunakan fetchAll(), atau fetchAssoc() jika Anda menginginkan array pasangan key => value.

2
umesh