我习惯使用像MySQL或PostgreSQL这样的关系数据库,并结合使用Symfony,RoR或Django等MVC框架,我觉得它很有用.
但是最近我听说很多关于MongoDB的非关系型数据库,或者引用官方定义,
一个可扩展,高性能,开源,无架构,面向文档的数据库.
我真的很感兴趣,我希望了解下一个项目的所有选项,并选择最好的技术.
在哪些情况下使用MongoDB(或类似数据库)比使用"经典"关系数据库更好?MongoDB与MySQL的优势一般是什么?或者至少,为什么它如此不同?
如果你有指向文档和/或示例的指针,它也会有很大的帮助.
我想要做的很简单:将数据存储在我想要稍后阅读的自定义配置文件中.
我创建something.yml了我放在全局config目录中的文件.它看起来像这样:
prod:
test: ok
dev:
test: ko
all:
foo: bar
john: doe
Run Code Online (Sandbox Code Playgroud)
然后我复制了config_handlers.yml并将其放在config目录中,并在文件顶部添加了以下内容:
config/something.yml:
class: sfDefineEnvironmentConfigHandler
param:
prefix: something_
Run Code Online (Sandbox Code Playgroud)
但如果我打电话,sfConfig::get("something_foo");我会继续NULL.
我做错了什么?我只想读取值,所以不需要创建一个自定义配置处理程序,对吧?
我已经阅读了这里的文档:http://www.symfony-project.org/book/1_2/19-Mastering-Symfony-s-Configuration-Files即使我正在运行1.4(我不认为改变了自那时候起).
编辑:当然我可以使用,sfYaml::load()但我想以更好的方式做事.
假设我的Symfony2项目中有两个实体:Category和Article(包含许多文章的类别).
在我CategoryRepository,我有这个方法:
findAllDummy(){
return $this->createQueryBuilder('c')
->leftJoin('c.Articles a')
->getQuery()->getResult();
}
Run Code Online (Sandbox Code Playgroud)
如果我记得很清楚,在Symfony1.4(以及Doctrine的相应版本)中,返回的对象的"articles"属性将由相应的Article对象填充.现在,在Symfony2中,返回Proxy对象.
因此,如果我遍历特定类别的文章,将执行与迭代一样多的查询.
foreach($category->getArticles() as $article){
echo $article->getDoctrine()
->getRepository('')getTitle();
}
Run Code Online (Sandbox Code Playgroud)
我知道这是Doctrine2.1的默认延迟加载行为.
问题1:这是一个更好的解决方案?N个查询而不是1个.
我尝试通过执行以下操作强制执行加载!
findAllDummy(){
return $this->createQueryBuilder('c')
->leftJoin('c.articles a')
->getQuery()
->setFetchMode('Category', 'articles', 'EAGER')
->getResult();
}
Run Code Online (Sandbox Code Playgroud)
但结果仍然相同.
问题2:如何在Doctrine2中强行加载?
我想创建自己的帮助器,但无法在Google上找到任何有关Symfony 1.4/Doctrine的帮助.
我想这与创建myClassHelper.class.phpin lib/helpers/或者某事有关,但我不知道要实现什么,或者是否必须覆盖特定的方法.
任何帮助,将不胜感激!
我正在使用Symfony 1.4和Doctrine.
到目前为止,我使用Symfony运行任务没有问题.但是现在我必须导入相当多的数据并将它们保存在数据库中,我才得以臭名昭着
"致命错误:允许的内存大小为XXXX字节耗尽"
在导入过程中,我只创建新对象,设置几个字段并保存它们.
我很确定这与我在保存数据时创建的对象数量有关.但是,取消设置这些对象并没有做任何事情.
是否有任何最佳实践来限制Symfony中的内存使用?
(这里提到的关于这个主题的大多数问题都有点陈旧,我想知道那些年来Node生态系统发生了哪些变化.)
我基本上是想在node.js的应用程序中实现一个作业队列.我听说过Sidekiq在Ruby世界中的行动以及它的工作有多棒,并且想知道节点中是否存在类似的东西.
工作人员将使用Javascript编写,因此它不必是多语言(如果是,那就很好,但绝对不是必需的).
一个很大的优点是可视化当前正在运行的作业,失败的作业等.
你们用的是什么?你知道哪些lib /服务符合这些要求?
我想在Symfony 1.4中更改日期的格式
默认的是:
<?php echo $question->getUpdatedAt();
// Returns 2010-01-26 16:23:53
?>
Run Code Online (Sandbox Code Playgroud)
我希望我的日期格式如下: 26/01/2010 - 16h23
我尝试使用format_date辅助DateHelper类.
不幸的是,API相当空(关于它真的需要做些什么.)
浏览帮助器的源代码,我发现可以传递第二个参数format.
我假设它使用与PHP的日期函数相同的语法.但这是它输出的内容(与上面相同):
<?php sfContext::getInstance()->getConfiguration()->loadHelpers('Date');
// [...]
echo format_date($question->getUpdatedAt(),'d/m/y - H\hi')
// Returns 26/23/2010 - 16\4i
Run Code Online (Sandbox Code Playgroud)
我敢肯定,我不是第一个在这方面遇到麻烦的人,但我一直在谷歌上搜索,没有任何准确的信息显示出来.
你们有没有想过如何在Symfony 1.4中格式化日期?
我正在使用Symfony 1.4和Doctrine.
假设我有两个类:品牌和产品.
当我在基于Admin Generator的管理员中创建新产品时,我想从下拉列表中选择一个品牌.Admin Generator正在为我做这件事,自动创建一个sfWidgetFormDoctrineChoice.
问题是品牌是按照ID排序的.我希望他们的"标签"字段可以订购.
为了做到这一点,我在ProductForm课堂上做了以下几点:
$this->widgetSchema['brand_id']->addOption('order_by','label');
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
语法错误或访问冲突:1064 SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的'a'附近使用正确的语法.失败的查询:"SELECT b.id AS b__id,b.external_id AS b__external_id,b.label AS b__label,b.created_at AS b__created_at,b.updated_at AS b__updated_at FROM brand b ORDER BY la"
声明的顺序真的很奇怪.我不明白为什么它似乎削减了命令的名称.
编辑:显然'order_by'选项期望数组作为第二个参数.它期望什么价值?
我今天想在Rails中创建一个基本的"destroy"链接,所以我写了这个:
<%= link_to "destroy me", @company, :method=>:delete
%>
Run Code Online (Sandbox Code Playgroud)
生成的代码是:
<a href="/companies/1"
data-method="delete"
rel="nofollow">destroy me</a>
Run Code Online (Sandbox Code Playgroud)
在我的路线,通常
resources :companies
Run Code Online (Sandbox Code Playgroud)
我的摧毁行动在我的控制器里.
但无论何时我点击链接,我都会被重定向到该show动作.奇怪的.
事实证明我的布局中没有包含以下行:
<%= javascript_include_tag :defaults %>
Run Code Online (Sandbox Code Playgroud)
包含它后,销毁链接有效!
为什么?为什么我需要包含默认的javascript标记才能使其正常工作?
由于我不想使用原型,我如何只包含我需要的文件?
我正在使用Google Maps Javascript API v3开发网站.
API的免费版本每天限制25000个请求.但是如果达到这个限制会发生什么?
有没有办法检测到已达到请求限制,因此可以显示后备Google Maps Image API地图?
我正在用数字进行一些计算,并且只想打印一个整数(没有小数的数字).
我认为类的toFixed()方法Number可以解决问题,而且大部分时间都可以.但很多时候会返回奇怪的值.这里有两个例子:
Number(0.002).toFixed(0)返回
"0."时
Number(1.002).toFixed(0)返回
"1"(没有句点)
偶尔Number(0.002).toFixed(0)回来"1"
不用说,这不是预期的行为.我没有正确使用这种方法吗?
**编辑:**我知道我必须要做int(0.002),0但我想了解这种奇怪的行为.
我创建了一个error500.php文件,web/errors/现在想测试它.
我试着把这一行放在我的一个动作中:
$this->getResponse()->setStatusCode(500);
Run Code Online (Sandbox Code Playgroud)
不幸的是它似乎被忽略了.
你们知道这里发生了什么吗?
我正在使用Symfony 1.4.
编辑: Firebug告诉我错误实际上已被触发,但页面仍在加载之后.而且我在生产环境中.
symfony-1.4 ×6
symfony1 ×6
doctrine ×3
javascript ×2
php ×2
actionscript ×1
air ×1
apache-flex ×1
database ×1
date ×1
doctrine-orm ×1
google-api ×1
helpers ×1
job-queue ×1
lazy-loading ×1
memory ×1
mongodb ×1
node.js ×1
symfony ×1
yaml ×1