0

zendfraworkでクエリを実行する必要があります。クエリは以下のとおりです。

select * from users where role_id in (3,5) and emailID not in ('abc@abc.com', 'cba@cba.com');

文字列を渡します

$whereString = role_id in (3,5) and emailID not in ('abc@abc.com', 'cba@cba.com');

$this->fetchList($whereString) // where $this is object of users

ただし、fetchList()関数は最初の部分のみを実行します。role_id in (3,5)

しかし、2番目の部分ではありません。emailID not in ('abc@abc.com', 'cba@cba.com');

fetchList()の結果には、「abc@abc.com」と「cba@cba.com」が含まれます。

fetchList()は次のとおりです。

    public function fetchList($where=null, $order=null, $count=null, $offset=null)
        {
                $resultSet = $this->getDbTable()->fetchAll($where, $order, $count, $offset);
                $entries   = array();
                foreach ($resultSet as $row)
                {
                        $entry = new Application_Model_Users();
                        $entry->setId($row->id)
                              ->setName($row->name)
                              ->setEmail($row->email)
                        $entries[] = $entry;
                }
                return $entries;
        }

fetchAll():

   /**
     * Fetches all rows.
     *
     * Honors the Zend_Db_Adapter fetch mode.
     *
     * @param string|array|Zend_Db_Table_Select $where  OPTIONAL An SQL WHERE clause or Zend_Db_Table_Select object.
     * @param string|array                      $order  OPTIONAL An SQL ORDER clause.
     * @param int                               $count  OPTIONAL An SQL LIMIT count.
     * @param int                               $offset OPTIONAL An SQL LIMIT offset.
     * @return Zend_Db_Table_Rowset_Abstract The row results per the Zend_Db_Adapter fetch mode.
     */
    public function fetchAll($where = null, $order = null, $count = null, $offset = null)
    {
        if (!($where instanceof Zend_Db_Table_Select)) {
            $select = $this->select();

            if ($where !== null) {
                $this->_where($select, $where);
            }

            if ($order !== null) {
                $this->_order($select, $order);
            }

            if ($count !== null || $offset !== null) {
                $select->limit($count, $offset);
            }

        } else {
            $select = $where;
        }
        print_r($select);
        $rows = $this->_fetch($select);

        $data  = array(
            'table'    => $this,
            'data'     => $rows,
            'readOnly' => $select->isReadOnly(),
            'rowClass' => $this->getRowClass(),
            'stored'   => true
        );

        $rowsetClass = $this->getRowsetClass();
        if (!class_exists($rowsetClass)) {
            require_once 'Zend/Loader.php';
            Zend_Loader::loadClass($rowsetClass);
        }
        return new $rowsetClass($data);
    }

どんな体も私が何を間違えたか知っています。

4

1 に答える 1

0

よくわからないので、少し手足で出かけます。これは見積もりの​​問題のようです。たぶん、次のようなクエリ文字列を渡してみてください。

//use Zend_Db_Statement to process raw SQL.

//get default adapter
$db = Zend_Db_Table::getDefaultAdapter();
//write SQL statement
$sql = "select * from users where role_id in (3,5) and emailID not in ('abc@abc.com', 'cba@cba.com')";
//assuming MySql as DB instantiate object
$stmt = new Zend_Db_Statement_Mysqli($db, $sql);
//Execute SQL Statement accepts optional parameter for array() of values to be bound
$stmt->execute();

または、select()オブジェクトを使用してクエリを作成することもできます。

//get default adapter
$db = Zend_Db_Table::getDefaultAdapter();
//instantiate the select() object
$select = new Zend_Db_Select($db);
$select->from('users');
//two where will build an AND query use $select->orWhere() to build an OR query 
$select->where('role_id in (3,5)');
$select->where("emailID not in ('abc@abc.com', 'cba@cba.com')");
$result = $model->fetchList($select);

$whereString有効なPHP文字列であれば、次fetchAll()の文字列またはインスタンスを受け入れるため、機能する可能性がありZend_Db_Selectます。

$ whereString = "role_id in(3,5)and emailID not in('abc@abc.com'、'cba@cba.com')";

これがいくつかの助けになることを願っています...私はショットを撮りました。

于 2012-04-22T08:58:49.410 に答える