在其他类中扩展wpdb - 当使用get_results for select时,我将返回null

时间:2012-12-17 00:20:51

标签: wordpress wordpress-plugin

我在WP中添加了自定义插件(由我创建),插件名为BaseModel,扩展了wpdb。

这里的问题是我每次尝试运行查询时都会得到false或null或结果为空数组。

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(){
}}

有人可以告诉我出了什么问题吗?

感谢。

3 个答案:

答案 0 :(得分:5)

实际上它不是一个完整的OOP解决方案,但我通过在我的函数中添加全局$ wpdb来解决这个问题。

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(){
}}

我希望你会发现这有用。

答案 1 :(得分: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();
    }
}

答案 2 :(得分:0)

我不认为你想延伸它吗?如果此类将始终在Wordpress文件中加载,那么您将可以访问全局$ 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);
    }
}