致命的なエラー:非オブジェクトのメンバー関数fields()の呼び出し


8

エラーをスローする次のコードがあります。

/**
 * 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;
}

私が受け取っているエラーは:

致命的なエラー:非オブジェクトのメンバー関数fields()の呼び出し

そしてその行にスローされます:

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

私が間違ったことを理解できません。すべてが私には問題なく見え、結合と追加のテーブルフィールドがなくてもコードは正常に実行されます。

何かご意見は?

回答:


17

SelectQuery::join()SelectQuery::leftJoin()彼らは連鎖させることができないので、などは、(彼らはJOINを作成するエイリアスを返す)クエリを返しません。

次のようにコードを分離するだけです。

$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();

私も感謝しています!答えを読む前に夢中になった...
Kojo

1

これは、db_selectをjoinを使用して記述すると想定した方法です(ケースでは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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.