2012-12-17 11 views
6

Ho aggiunto un plug-in personalizzato (creato da me) in WP in quel plug-in Ho una classe denominata BaseModel, che estende wpdb.Estendi wpdb in un'altra classe - quando uso get_results per select mi dà null

Il problema qui è ogni volta che si tenta di eseguire query ottengo array falso o null o vuoto come risultato.

class BaseModel extends wpdb{ 

public function __construct(){ 
    parent::__construct(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
} 

function get_destinations($limit, $order){ 
    $query = "SELECT * FROM wp_relations"; 

    $result = $this->get_results($query, ARRAY_A); 
    var_dump($result); 
} 

function get_total_destinations(){ 
}} 

Qualcuno può dirmi cosa c'è che non va?

Grazie.

+0

Sei sicuro che le costanti delle credenziali db siano definite? –

risposta

5

In realtà non è una soluzione OOP completa, ma risolvo questo aggiungendo global $ wpdb nelle mie funzioni.

class BaseModel { 


function get_destinations($limit, $order){ 
    global $wpdb; 
    $query = "SELECT * FROM wp_relations"; 

    $result = $wpdb->get_results($query, ARRAY_A); 
    var_dump($result); 
} 

function get_total_destinations(){ 
}} 

Spero che lo troverai utile.

2

More Info WordPress tests with wpdb

<?php 
class testWPDB extends wpdb { 
function prepare($query, $arguments){ 
     return vsprintf($query, $arguments); 
    } 
} 

class UTCW_Test_Data extends WP_UnitTestCase { 
protected $utcw; 
function setUp(){ 
    $this->utcw = UTCW_Plugin::get_instance(); 
} 

function getWPDBMock(){ 
    return $this->getMock('testWPDB', array('get_results'), array(), '', false); 
} 

function test_author(){ 
    $instance[ 'authors' ] = array(1, 2, 3); 
    $config = new UTCW_Config($instance, $this->utcw); 
    $db = $this->getWPDBMock('get_results'); 

    $db->expects($this->once()) 
    ->method('get_results') 
    ->with($this->stringContains('post_author IN (1,2,3)')); 

    $data = new UTCW_Data($config, $db); 
    $data->get_terms(); 
    } 
} 
0

Non credo che si desidera estendere da esso? Se questa classe verrà sempre caricata all'interno dei file Wordpress, avrai accesso al globale $ wpdb.

class RandomClass { 

    private $wpdb = false; 

    public function __construct() { 
     global $wpdb; 

     if (is_object($wpdb)) { 
      $this->wpdb = $wpdb; 
     } 
    } 

    public function get_results($data) { 
     return $this->wpdb->get_results($data); 
    } 
}  
Problemi correlati