Lỗi nghiêm trọng: Gọi đến một trường hàm thành viên () trên một đối tượng không


8

Tôi có đoạn mã sau đang gây ra lỗi:

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

Lỗi tôi nhận được là:

Lỗi nghiêm trọng: Gọi đến một trường hàm thành viên () trên một đối tượng không

và nó đang bị ném trên dòng này:

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

Tôi không thể tìm ra những gì tôi đã làm sai, mọi thứ đều ổn với tôi và mã chạy tốt mà không cần các trường bảng tham gia và bổ sung.

Có suy nghĩ gì không?

Câu trả lời:


17

SelectQuery::join(), SelectQuery::leftJoin()v.v. không trả lại truy vấn (họ trả lại bí danh cho THAM GIA đã tạo), vì vậy chúng không thể bị xiềng xích.

Chỉ cần tách mã của bạn ra như thế này:

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

Tôi cũng biết ơn! Phát điên trước khi đọc câu trả lời của bạn ...
Kojo

1

Đây là cách bạn giả sử viết db_select bằng phép nối (leftJoin trong trường hợp của bạn)

   //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();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.