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?

Ryan Price
quelle

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();
Clive
quelle
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();
Aboodred1
quelle