我有一个带有Doctrine 1的应用程序,我通过生成update_datetime
对象的字段new Zend_Date->getIso()
.它工作得很好多年,但现在我得到了一个新的笔记本和Doctrine尝试插入DATETIME
字段作为字符串"2013-07-12T03:00:00+07:00"
而不是正常的MySQL日期时间格式"2013-07-12 00:00:00"
,这是完全奇怪的.
同样的代码在另一台计算机上运行得很好.一切都几乎相同 - 两者都是MySQL 5.6.12,PHP 5.3.15.知道我应该在哪里看?
Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2013-07-12T03:00:00+07:00' for column 'nextrun' at row 1' in library/Doctrine/Connection.php:1083
UPDATE
好的,在StackOverflow社区的帮助下,我终于解决了它.问题STRICT_TRANS_TABLES
在于sql_mode
变量.但是改变它/etc/my.cnf
似乎还不够,所以我必须运行mysql -uroot
并键入以下内容:
set sql_mode=NO_ENGINE_SUBSTITUTION; set global sql_mode=NO_ENGINE_SUBSTITUTION;
因此删除 STRICT_TRANS_TABLES
UPDATE2 如何永远摆脱STRICT?如何在MySQL中摆脱STRICT SQL模式
CodeIgniter已经使用了一段时间,我不记得我是安装了v2还是只是从另一个项目中复制了文件.
有任何想法吗?
我有桌子测试:
Test:
id | name
1 | aaa
2 |
3 | ccc
4 | aaa
5 |
6 | ddd
Run Code Online (Sandbox Code Playgroud)
我想要名称为NOT NULL的结果:
aaa
ccc
aaa
ddd
Run Code Online (Sandbox Code Playgroud)
我怎么能得到:
Doctrine_Core::getTable('Test')->findBy('name', NOTNULL??) <-doesnt working
Run Code Online (Sandbox Code Playgroud)
在模型中:
$this->createQuery('u')
->where('name = ?', NOTNULL ???) <- doesnt working
->execute();
Run Code Online (Sandbox Code Playgroud) 我需要这样的东西:
$products = Products::getTable()->find(274);
foreach ($products->Categories->orderBy('title') as $category)
{
echo "{$category->title}<br />";
}
Run Code Online (Sandbox Code Playgroud)
我知道这是不可能的,但是......如果不创建Doctrine_Query,我该怎么做呢?
谢谢.
我正在使用Doctrine 1.2,我怎样才能将查询对象变成json/array格式?
$user = Doctrine_Query::create()
->select('u.id, u.username, u.firstname, u.lastname')
->from('User u')
->orderby('u.id')
->execute();
Run Code Online (Sandbox Code Playgroud) 我正在进行Doctrine查询,我必须在where子句中进行通配符匹配.我该如何逃避我想要插入的变量?
我想要的查询:
SELECT u.* FROM User as u WHERE name LIKE %var%
Run Code Online (Sandbox Code Playgroud)
PHP代码到现在为止:
$query = Doctrine_Query::create()
->from('User u')
->where();
Run Code Online (Sandbox Code Playgroud)
where子句应该包含哪些内容?我想要匹配的变量是$ name
有人碰巧知道1.x的Doctrine文档发生了什么变化?浏览他们的官方文档页面(必须滚动到1.2),然后单击任何文档链接会产生404.我还注意到几个谷歌搜索1.x文档正在做同样的事情.
Doctrine最近是否更改了doc结构而忘记更新?或者这是他们告诉我们升级到2.x的方式吗?
- 更新(3.9.2012) -
似乎Doctrine正在将他们的文档移动到GitHub.OP中提到的一些链接现在解析为https://github.com/doctrine/doctrine1-documentation.
- 更新(3.20.2012) -
看起来有些文档已移植到他们的ReadTheDocs门户网站.比浏览原始.txt文件更清晰的界面.
我需要一个简单的表格列.
例如,一个表"项目",带有列id
,name
和year
.
如果我做:
$q = Doctrine_Query::create()
->select('a.pro_id')
->from('fndr_proyecto a')
->where('a.pro_id =?',1);
$pro = $q->execute();
json_encode($pro->toArray());
Run Code Online (Sandbox Code Playgroud)
答案就是所有专栏
{"id":1,"name":"Project name","year":2013}
Run Code Online (Sandbox Code Playgroud)
但我只需要一列.我预计:
{"id":1}
Run Code Online (Sandbox Code Playgroud)
它与DQL一起使用,因为本机SQL工作正常.
ORM是使用Visual Paradigm自动构建的.
我想知道是否有办法声明我的学说模型的默认顺序.
例如
我有一个work
模型,它有photos
.当我加载作品时,与其关联的所有照片都会加载到其中$work->photos
.当我显示它们时,它们按其ID排序.
在另一个字段上声明默认顺序或者覆盖提取行为altoghether非常方便.
我宁愿不将照片转换为数组并使用usort.谢谢.
我对Doctrine模型hydrate()
方法有一点问题.我使用这种方法从给定的数组中水合一个conrete模型的对象,如下所示:
$model = new Doctrine\Model\Model;
$model->hydrate($model_array);
Run Code Online (Sandbox Code Playgroud)
使用嵌套的子模型对简单物体进行保湿时,一切都很完美.现在问题是我需要使用嵌套对象来水合(使用此方法)一个对象(其中一些对象也有嵌套对象).
如果我使用HYDRATE_RECORD
它会很好但查询中的所有记录都将作为对象返回,这意味着更多的内存消耗.因此,我正在使用HYDRATE_ARRAY
并按需将水泥混凝土阵列水合成物体.
假设我有一个模型A,它有嵌套模型AB,AC(一对多),AD和AC有另一个嵌套模型ACE.在print_r
A数组之后我们可以看到这个结构:
A Array (
...
ab Array ( ... )
ac Array (
AC Array (
...
ace Array ( ... )
)
AC Array (
...
ace Array ( ... )
)
...
)
ad Array ( ... )
)
Run Code Online (Sandbox Code Playgroud)
通常在使用水合物后,我会认为这将是我的目标:
A Object {
...
ab Object { ... }
ac Array (
AC Object {
...
ace Object { ... }
} …
Run Code Online (Sandbox Code Playgroud) doctrine ×10
doctrine-1.2 ×10
php ×7
codeigniter ×1
collections ×1
doctrine-orm ×1
dql ×1
json ×1
mysql ×1
orm ×1
sorting ×1
symfony-1.4 ×1
symfony1 ×1