it-swarm.com.de

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

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?

8
Ryan Price

SelectQuery::join() , SelectQuery::leftJoin() usw. geben die Abfrage nicht zurück (sie geben den Alias ​​an den erstellten JOIN zurück), also sie kann nicht angekettet werden.

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

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