0

我正在为 prestashop 编写一个标签,其中列出了原产国的客户。到目前为止还可以,但是我想按国家/地区过滤查询或表,所以我想添加如下内容: WHERE iso_code = 'IT' 显然 prestashop 不会让我这样做,我该怎么办?这是我的代码:

<?php
include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php');
class AdminCustomersCountries extends AdminTab
{
    public function __construct()
    {
        $this->table = 'customer';
        $this->className = 'Customer';
        $this->lang = false;
        $this->edit = false;
        $this->view = true;
        $this->delete = false;
        $this->deleted = false;
        $this->requiredDatabase = true;

        $this->_select = '(SELECT cy.iso_code FROM ps_address AS addr, ps_country AS cy WHERE addr.id_customer=a.id_customer AND addr.id_country=cy.id_country) AS iso_code';
        $this->fieldsDisplay = array(
        'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
        'lastname' => array('title' => $this->l('Last Name'), 'width' => 80),
        'firstname' => array('title' => $this->l('First name'), 'width' => 60),
        'email' => array('title' => $this->l('E-mail address'), 'width' => 120, 'maxlength' => 19),
        'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false),
        'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'callback' => 'printNewsIcon', 'orderby' => false),
        'iso_code' => array('title' => "Nazione", 'width' => 60, 'orderby'=>false, 'search'=>false));

        $this->optionTitle = "Prova";
        parent::__construct();
    }

    public function postProcess()
    {
        // This function is executed when the Submit button is clicked
        // Use it to store the value of text fields in the database

        parent::postProcess();
    }

    public function displayForm($token=NULL)
    {
        // This function can be used to create a form with text fields
    }
}

?>

但是,在这里,我尝试添加 WHERE 子句,但没有结果:

<?php
include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php');
class AdminCustomersCountries extends AdminTab
{
    public function __construct()
    {
        $this->table = 'customer';
        $this->className = 'Customer';
        $this->lang = false;
        $this->edit = false;
        $this->view = true;
        $this->delete = false;
        $this->deleted = false;
        $this->requiredDatabase = true;

        $this->_select = '(SELECT cy.iso_code FROM ps_address AS addr, ps_country AS cy WHERE addr.id_customer=a.id_customer AND addr.id_country=cy.id_country AND cy.iso_code='IT') AS iso_code';
        $this->fieldsDisplay = array(
        'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
        'lastname' => array('title' => $this->l('Last Name'), 'width' => 80),
        'firstname' => array('title' => $this->l('First name'), 'width' => 60),
        'email' => array('title' => $this->l('E-mail address'), 'width' => 120, 'maxlength' => 19),
        'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false),
        'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'callback' => 'printNewsIcon', 'orderby' => false),
        'iso_code' => array('title' => "Nazione", 'width' => 60, 'orderby'=>false, 'search'=>false));

        $this->optionTitle = "Prova";
        parent::__construct();
    }

    public function postProcess()
    {
        // This function is executed when the Submit button is clicked
        // Use it to store the value of text fields in the database

        parent::postProcess();
    }

    public function displayForm($token=NULL)
    {
        // This function can be used to create a form with text fields
    }
}

?>
4

2 回答 2

1

我不确定您为什么在那里使用子查询,但 PS AdminTab 类提供了另外两个选项。

1) Where : 当你需要添加 where 子句时,你可以像下面这样写

$this->_where = 'your condition here';

2) 连接:PS 还为您提供了额外的连接功能,您可以像这样编写它们

$this->_join = 'write down all your joins here like normal queries';

现在,如果您想通过其他检查(wheres)从其他表中获取其他信息,那么您可以按照以下方式进行操作。:

**注意:对于表格,PS 给出一个以“a”开头的别名,如果它有其他表格,如语言表格,那么它与 b 一起使用,依此类推。所以你应该知道,在 join、_select 和 _where 中你应该使用正确的别名。**

$this->_select = 'all your additional fields from the tables you need. Those tables should be joined in the _join query.';

$this->_join = 'All your joins here with correct aliases, as these aliases are used in _select query and in _where';

$this->_where = 'your where clauses here.';

我希望这将帮助您更正您的查询。

谢谢

于 2013-06-02T06:40:00.443 回答
0

该行$this->_select = '(SELECT cy.iso_code FROM ps_address AS addr, ps_country AS cy WHERE addr.id_customer=a.id_customer AND addr.id_country=cy.id_country AND cy.iso_code='IT') AS iso_code';使用 搜索 IT 'IT'

PHP 不会读取 IT,因为撇号没有转义。我认为使用AND cy.iso_code=\'IT\')应该工作。

于 2013-06-01T13:39:23.410 回答