我在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获取帮助
但是当我尝试运行该查询时,会出现一个错误,说明了这一点
选择查询无法与其他人联接
任何人都可以帮助我吗?提前致谢.... :)
表
使用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) 我有一个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) 我正在学习zf2,我正面临一个涉及2个(最终更多)模块一起工作的问题.请注意,我仔细阅读了这篇文章(以及相关文章),这对我帮助很大.我将解释一下这个问题:
id | field_name | field_value
1 | country | germany |
2 |国内|法国|
3 |性别|男|
4 |性别|女|
5 | TIPO |汽车|
6 | TIPO |飞|
...
ID |名称| id_tipo |
1 |菲亚特| 5 |
2 |莎| 6 |
3 |福特| 5 |
4 |法国航空6 |
...
(id_tipo是一个选项FK)
还要考虑:
作为测试,我在表单类中添加了这个字段,在视图和编辑模式下一切正常:
$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)我一直在尝试为一个字段订购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,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秒,这太长了.有什么建议?
谢谢!
我的数据库中的表是使用正确的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) 我想删除一些数据库条目,每个条目都有一个唯一的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正常工作,但我怎么能这样做呢?
我最近继承了一个使用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或其他一些使用占位符来参数化查询的方法?
我之前有过使用框架的经验,但从未真正深入到模型中.我不知道这是所有框架的情况还是只是zend,但目前我正在学习Zend Framework.
我一直在浏览示例应用程序并尝试阅读大量文章,但我无法找到一个简短而明确的答案,让我感到困惑.
这三个班级之间有什么关系?(model,modelmapper,datatable)
假设我有一个名为的数据库表users,它有3个字段userID, userName, userPassword什么是示例代码?
是否有必要以这种方式构建我的应用程序的模型部分?如果我只是从数据库中检索数据并将结果作为数组返回,那么这是一个不好的做法吗?
请考虑这是一个非常简单的应用程序,它包含用户,图像库和消息传递功能.
提前致谢.