我猜这是一个Doctrine bug(我在JIRA问题跟踪器上提交了一个问题),但是如果只是用户错误我决定在这里发布.
在某些情况下,使用由2个外键和一个元数据字段组成的复合主键在连接表中保留实体集合失败.代码基于此处的说明:Doctrine docs
成功:当FOREIGN KEY 1在要保留的集合中的项目相同时,并且FOREIGN KEY 2在任何现有PRIMARY KEY中大于FOREIGN KEY 2,集合中的实体和相关实体将被正确保留:
示例:GPA"添加以下值"存在且具有评估值{"assessment":6,"value":4}
我们将尝试添加新的评估值,其中assessment_id> GPA的任何现有评估值的"评估值"
请求有效负载: {"name":"add val below","courses":[],"assessmentValues":[{"assessment":6,"value":4},{"assessment":7,"value":3}]}
调试日志:
[2013-12-31 11:48:48] app.INFO: GPA ID PRESAVE IN CONTROLLER:9 [] [] [2013-12-31 11:48:48] app.INFO: PRESAVE IN CONTROLLER ASSESSMENT VAL ASSESSMENT ID:7 [] [] [2013-12-31 11:48:48] app.INFO: PRESAVE IN CONTROLLER ASSESSMENT VAL POINTS:3 [] [] [2013-12-31 11:48:48] app.INFO: GPA ID PRESAVE IN CONTROLLER:9 [] [] [2013-12-31 11:48:48] app.INFO: PRESAVE IN CONTROLLER ASSESSMENT VAL ASSESSMENT ID:6 [] [] …
我有带有城市列表 (>1M) 的 postgreSQL 表,我需要通过像“abc%”这样的模式搜索这个表。我在city.name列上创建了 B 树索引,这是我得到的:
EXPLAIN SELECT * FROM city WHERE NAME ~~* '???%'
Seq Scan on city (cost=0.00..44562.62 rows=117 width=131)
Run Code Online (Sandbox Code Playgroud)
和确切的选择:
EXPLAIN SELECT * FROM city WHERE NAME = '??????'
Index Scan using city_name_idx on city (cost=0.43..12.33 rows=2 width=131)
Run Code Online (Sandbox Code Playgroud)
有没有办法使用标准索引在第一次选择时获得良好的性能?
我正在使用 Symfony2/Doctrine2,所以在这里实现特定于数据库的东西不是很容易(而且我不想)。
更新模式时,doctrine始终会删除并添加约束.我想,这是错的......
php app/console doctrine:schema:update --force
Updating database schema...
Database schema updated successfully! "112" queries were executed
php app/console doctrine:schema:update --dump-sql
ALTER TABLE table.managers DROP CONSTRAINT FK_677E81B7A76ED395;
ALTER TABLE table.managers ADD CONSTRAINT FK_677E81B7A76ED395 FOREIGN KEY (user_id) REFERENCES table."user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
...
php app/console doctrine:schema:validate
[Mapping] OK - The mapping files are correct.
[Database] FAIL - The database schema is not in sync with the current mapping file.
Run Code Online (Sandbox Code Playgroud)
怎么可以解决这个问题?