Schwerwiegender Fehler: Aufruf eines Mitgliedsfunktionsfelds () für ein Nichtobjekt


8

Ich habe den folgenden Code, der einen Fehler auslöst:

/**
 * Custom content function
 * 
 * Get system status from the helpdesk database
 * 
 * @return
 *   An key => value pairing of systems and their status
 */
function system_status_sjhc_status_check() {
    //connection info for the helpdesk database
    $helpdeskDB = array(
            'database' => 'mydb',
            'username' => 'myuser', 
            'password' => 'mypass', 
            'host' => 'myhost', 
            'driver' => 'mysql', 
    );
    Database::addConnectionInfo('helpdeskDB', 'default', $helpdeskDB);
    db_set_active('helpdeskDB');

    //grab the current light status
    $result = db_select('hd_lights', 'l')
        ->fields('l')
        ->leftJoin('hd_status', 's', 'l.id = s.id')
        ->fields('s', array('stamp', 'message'))
        ->orderBy('`order`', 'ASC')
        ->execute();

    db_set_active(); // without the paramater means set back to the default for the site

    return $result;
}

Der Fehler, den ich erhalte, ist:

Schwerwiegender Fehler: Aufruf eines Mitgliedsfunktionsfelds () für ein Nichtobjekt

und es wird auf diese Linie geworfen:

    ->fields('s', array('stamp', 'message'))

Ich kann nicht herausfinden, was ich falsch gemacht habe, alles sieht für mich in Ordnung aus und der Code läuft ohne den Join und zusätzliche Tabellenfelder einwandfrei.

Irgendwelche Gedanken?

Antworten:


17

SelectQuery::join(), SelectQuery::leftJoin()Usw. bringen nicht die Abfrage (sie den Alias auf das erstellte JOIN zurück), so dass sie nicht angekettet werden können.

Trennen Sie Ihren Code einfach so:

$query = db_select('hd_lights', 'l')
  ->fields('l')
  ->fields('s', array('stamp', 'message'))
  ->orderBy('`order`', 'ASC');

$query->leftJoin('hd_status', 's', 'l.id = s.id');

$result = $query->execute();

Ich bin auch dankbar! Ich wurde verrückt, bevor ich deine Antwort las ...
Kojo

1

So nehmen Sie an, db_select mit join zu schreiben (in Ihrem Fall leftJoin)

   //grab the current light status
    $result = db_select('hd_lights', 'l')
        ->fields('l');
    $result->leftJoin('hd_status', 's', 'l.id = s.id');
    $result->fields('s', array('stamp', 'message'))
        ->orderBy('`order`', 'ASC')
        ->execute();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.