标签: zend-db-table

如何在Zend Framework中使用Join

我在zend中使用Join查询..喜欢

$select = $table->select()
                         ->from(array('e' => 'EducationHistory'),
                                array('status_DataDictionary_id'))
                             ->join(array('r' => 'ReportOrder'),
                                    'e.id = r.EducationHistory_id',
                                    array('reportOrderStatusId' => 'r.status_DataDictionary_id'))
                        ->where('r.orderBy_Organization_id = ?', 4) 
                        ->where('r.orderBy_Person_id = ?', 1)            
                        ->group('e.enrollno');
Run Code Online (Sandbox Code Playgroud)

为此,我从http://framework.zend.com/manual/en/zend.db.select.html获取帮助

但是当我尝试运行该查询时,会出现一个错误,说明了这一点

选择查询无法与其他人联接

任何人都可以帮助我吗?提前致谢.... :)

php zend-framework join zend-db-table

3
推荐指数
1
解决办法
7135
查看次数

如何更改模型中的Zend_Db_Table名称以插入多个表

使用Zend Framework,我创建了一个Model来将记录插入数据库.我的问题是,$this->insert($data)如何切换活动表,以便我可以将记录插入另一个表?

到目前为止,这是我的代码:

class Model_DbTable_Foo extends Zend_Db_Table_Abstract
{
  protected $_name = 'foo';

  public function addFoo($params)
  {
    $data = array(
      'foo' => $params['foo'],
    );
    $this->insert($data);
    $foo_id = $this->getAdapter()->lastInsertId();

    $data2 = array(
      'bar' => $params['bar']
    );
    // I need to change the Db Table name here.
    $this->insert($data2);
    $bar_id = $this->getAdapter()->lastInsertId();
  }
}
Run Code Online (Sandbox Code Playgroud)

php zend-framework zend-db-table models

3
推荐指数
1
解决办法
3698
查看次数

VARCHAR(4)存储的字符数多于四个

我有一个VARCHAR(4)列,它接收来自输入的数据,该输入可能超过4个字符.不过,这是可以的,我让MySQL自然地(或者我认为)切断了角色的结尾.

奇怪的是,当我稍后在PHP(使用PDO驱动程序)中查看数据库行结果时,整个字符串都在显示,而不仅仅是4个字符.

奇怪的是,如果我在MySQL CLI上执行SELECT查询,它只返回4个字符.即使我做了一个mysqldump,也只显示了4个字符.

知道什么可能导致这种奇怪的不一致吗?

请注意,这些字符都是数字.

编辑:根据请求,这里有一些代表save/fetch方法的伪代码:

储存:

$data = array(
     'name_first4'       => $fields['num'],   
     // name_first4 is the column name with VARCHAR(4)
);
$where = $this->getTable()->getAdapter()->quoteInto('id = ?', $id);
$this->getTable()->update($data,$where);
Run Code Online (Sandbox Code Playgroud)

使用Zend_Db_Table获取:

$row = $this->getTable()->fetchRow(
    $this->getTable()->select()->where('id=?',$data)
);
Run Code Online (Sandbox Code Playgroud)

php mysql zend-db-table

3
推荐指数
1
解决办法
1419
查看次数

zf2 form:使用来自数据库的数据填充select字段

我正在学习zf2,我正面临一个涉及2个(最终更多)模块一起工作的问题.请注意,我仔细阅读了这篇文章(以及相关文章),这对我帮助很大.我将解释一下这个问题:

  • 使用第一个模块(FrOption),管理员可以管理网站表单选项.所有选项都存储在db表中,如下所示:

id | field_name | field_value
1 | country | germany |
2 |国内|法国|
3 |性别|男|
4 |性别|女|
5 | TIPO |汽车|
6 | TIPO |飞|
...

  • 在我的模块(FrItem)中,我构建了一个需要一些"field_name"字段的表单.我的"项目"表格如下:

ID |名称| id_tipo |
1 |菲亚特| 5 |
2 |莎| 6 |
3 |福特| 5 |
4 |法国航空6 |
...

(id_tipo是一个选项FK)

还要考虑:

  • 我的实体有"tipo"属性,setter + getter
  • 我已经构建了一个ItemHydrator来将id_tipo db字段"映射"为"tipo"实体属性
  • 作为测试,我在表单类中添加了这个字段,在视图和编辑模式下一切正常:

    $this->add(
    'type' => 'Zend\Form\Element\Select',
    'name' => 'id_tipo',
    'options' => array (
        'label' => 'Tipo', 
        'empty_option' => 'Select',
        'value_options' => array ('5' …
    Run Code Online (Sandbox Code Playgroud)

php zend-form zend-db-table zend-framework2

3
推荐指数
1
解决办法
1万
查看次数

Zend Framework 2:获取有序的SQL调用

我一直在尝试为一个字段订购ASC / DESC呼叫(比如说craeted),但我似乎无法弄清楚如何在ZF2中做到这一点。

我在哪里错了..?

namespace Todo\Model;
class TodoTable extends AbstractTableGateway {
public function __construct(Adapter $adapter) {
    $this->adapter = $adapter;
    $this->resultSetPrototype = new ResultSet();
    $this->resultSetPrototype->setArrayObjectPrototype(new Todo());

    $this->initialize();
}
public function fetchAll() {
    $resultSet = $this->select(array('user_id'=>$this->user_id));
return $resultSet;
}
}
Run Code Online (Sandbox Code Playgroud)

php zend-db-table zend-db zend-framework2

3
推荐指数
1
解决办法
2679
查看次数

Zend Framework和Mysql - 非常慢

我正在使用php,mysql和zend框架创建一个网站.当我尝试运行任何sql查询时,页面生成跳转到大约0.5秒.那太高了.如果我转向sql,页面生成为0.001.我运行的查询量并不会真正影响页面生成时间(测试的1-10个查询).在0.5秒停留我无法弄清楚,我做错了什么.

我在bootstrap中连接到sql:

protected function _initDatabase ()
{
    try
    {
        $config = new Zend_Config_Ini( APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV );
        $db = Zend_Db::factory( $config -> database);
        Zend_DB_Table_Abstract::setDefaultAdapter( $db );
    }
    catch ( Zend_Db_Exception $e )
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个简单的模型

class StandardAccessory extends Zend_DB_Table_Abstract
{
    /**
     * The default table name 
     */
    protected $_name = 'standard_accessory';

    protected $_primary = 'model';

    protected $_sequence = false;
}
Run Code Online (Sandbox Code Playgroud)

最后,在我的索引控制器中,我只运行find方法.

require_once APPLICATION_PATH . '/models/StandardAccessory.php';
    $sa = new StandardAccessory( );
    $stndacc = $sa->find( 'abc' );
Run Code Online (Sandbox Code Playgroud)

所有这些都需要约0.5秒,这太长了.有什么建议?

谢谢!

mysql zend-framework zend-db-table

2
推荐指数
1
解决办法
5253
查看次数

Zend_Db_Table UTF-8字符

我的数据库中的表是使用正确的UTF-8字符集创建的,如下所示:

CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
...
...
...
...
...
PRIMARY KEY (id)
) ENGINE = INNODB  CHARACTER SET utf8 COLLATE utf8_slovak_ci;
Run Code Online (Sandbox Code Playgroud)

但是,当我使用Zend_Db_Table使用此方法从表中获取数据时:

public function getSingle($id)
{
    $select = $this->select();
    $where = $this->getAdapter()->quoteInto('id = ?', $id, 'INTEGER');
    $select->where($where);
    return $this->fetchRow($select);
}
Run Code Online (Sandbox Code Playgroud)

它返回一个带有乱糟糟的UTF-8字符的对象(我猜是转换为iso-8859-1).

当我通过phpmyadmin查看数据库时,它会正确显示所有字符,并且还显示正确的编码(UTF-8),因此我不知道问题出在哪里.

我怎么解决这个问题?

更新:

所以我做了这个,它的工作原理:

protected function _initDb()
{
    $this->configuration = new Zend_Config_Ini(APPLICATION_PATH
                                               . '/configs/application.ini',
                                               APPLICATION_ENVIRONMENT);
    $this->dbAdapter = Zend_Db::factory($this->configuration->database);
    Zend_Db_Table_Abstract::setDefaultAdapter($this->dbAdapter);
    $stmt = new Zend_Db_Statement_Pdo($this->dbAdapter,
                                      "SET NAMES 'utf8'");
    $stmt->execute();
}
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

UPDATE2:

我试过这个:

protected function …
Run Code Online (Sandbox Code Playgroud)

zend-framework zend-db-table zend-db

2
推荐指数
1
解决办法
6504
查看次数

Zend_Db_Table:删除多个条目

我想删除一些数据库条目,每个条目都有一个唯一的ID.我现在的代码看起来如此,从这里开始:Zend Framework:如何删除多个事情都属实的表行?

$where = array();
foreach ($IDs as $ID) {
   $where[] = $this->getAdapter()->quoteInto('id = ?', $ID);
}

$this->delete($where);
Run Code Online (Sandbox Code Playgroud)

这是在Zend_Db_Table_Abstract扩展的模型类中调用的.查询现在看起来像这样:

DELETE FROM `shouts` WHERE (id = '10') AND (id = '9') AND (id = '8')
Run Code Online (Sandbox Code Playgroud)

这当然不起作用,因为AND它必须要OR正常工作,但我怎么能这样做呢?

zend-framework zend-db-table zend-db

2
推荐指数
1
解决办法
5000
查看次数

Zend_Db_Table_Abstract和Zend_Db_Expr

我最近继承了一个使用ZF编写的应用程序,它在db中加密了各种字段.有很多模型扩展Zend_Db_Table_Abstract,其代码与此示例类似 -

<?php
class Partner extends Zend_Db_Table_Abstract {

    protected $_name = 'partner', $_primary = 'id';

    public function createPartner( $mobile ){

        $id = $this->insert( array(
                        'mobile' => new Zend_Db_Expr("AES_ENCRYPT('$mobile', 'random_key')"),
                        'createdOn' => date('Y-m-d H:i:s', mktime())
                    ) );

        $res = $this->find($id);
        return $res->current();
    }

}
?>
Run Code Online (Sandbox Code Playgroud)

我对这段代码的关注是$ mobile正在逐字传递到查询中.修改此值设置方式的最简洁方法是什么,以便它使用quoteInto或其他一些使用占位符来参数化查询的方法?

php zend-framework zend-db-table

2
推荐指数
1
解决办法
1857
查看次数

如何使用数据表和数据映射器?他们有必要吗?

我之前有过使用框架的经验,但从未真正深入到模型中.我不知道这是所有框架的情况还是只是zend,但目前我正在学习Zend Framework.

我一直在浏览示例应用程序并尝试阅读大量文章,但我无法找到一个简短而明确的答案,让我感到困惑.

这三个班级之间有什么关系?(model,modelmapper,datatable)

假设我有一个名为的数据库表users,它有3个字段userID, userName, userPassword什么是示例代码?

是否有必要以这种方式构建我的应用程序的模型部分?如果我只是从数据库中检索数据并将结果作为数组返回,那么这是一个不好的做法吗?

请考虑这是一个非常简单的应用程序,它包含用户,图像库和消息传递功能.

提前致谢.

php zend-framework zend-db-table zend-db php-5.3

2
推荐指数
1
解决办法
317
查看次数