我是第一次使用Doctrine2,但我认为这个问题非常通用,不依赖于特定的ORM.
Data Mapper模式中的实体是否应该知道并使用 Mapper?
我有几个具体的例子,但它们似乎都归结为同样的一般性问题.
如果我正在处理来自外部源的数据 - 例如a User有很多Messages- 并且外部源只提供最新的几个实体(如RSS提要),$user->addMessage($message)除非它知道Mapper,否则如何检查重复项,或者它通过集合"搜索"(似乎是一件低效的事情).
当然,控制器或事务脚本可以在将消息添加到用户之前检查重复项 - 但这似乎不太正确,并且会导致代码重复.
如果我有一个大型集合 - 再次User有很多Messages- User实体如何为集合提供限制和分页而不实际代理Mapper调用?
同样,控制器或交易脚本或任何使用实体可以直接使用映射来检索集合User的Messages通过次数,日期范围或其他因素的限制-而这也将导致代码重复.
答案是使用存储库并让实体知道它们吗?(至少对于Doctrine2,以及其他ORM使用的类似概念.)此时,实体仍然与Mapper相对分离.
有没有办法让MySQL订单结果与搜索词的"声音"有多接近?
我正在尝试订购包含城市名称用户输入的字段.存在变化和拼写错误,我想在顶部显示"最接近的"匹配.
我知道soundex可能不是最好的算法,但如果它(或其他方法)可以合理地成功 - 可能值得对数据库进行排序.
如果内存正确地为我服务,谷歌会为地图站点执行此操作.我知道谷歌的移动地图应用程序可以确定粗略的位置(我假设使用某种类型的单元塔查找),但我似乎记得该网站在移动浏览器上查看时有点接近当前位置.
任何人都知道如何/如果可能的话?IP地址是否根据塔或区域而变化(看起来他们会使用某种常见的运营商网关)?
尝试为本地开发(LAMP堆栈)设置基于CodeIgniter的项目,并且一旦所有配置文件都更新(意味着我成功地为CodeIgniter创建了有意义的引导错误),我在浏览器中收到此错误:
错误330(net :: ERR_CONTENT_DECODING_FAILED):未知错误.
内容编码错误:您尝试查看的页面无法显示,因为它使用的是无效或不受支持的压缩形式.
只是使用wget来获取文件工作正常,没有错误,我得到了我期待的内容.不确定这是CI和服务器的问题,还是项目的奇怪之处.谁看过这个吗?
如果多次打开php://temp(或php://memory)文件,句柄是否指向同一个文件?或者每个句柄都是独特的吗?
我在php文档中找不到答案,所以我要编写一个测试脚本来查找.我认为值得在这里询问,以便其他人可以轻松找到答案.
尝试删除实体,而不保留其他更改.请注意(虽然在这种特定情况下并不是真的需要),但该方法不应影响flush()操作后调用的结果.
$em->remove($entity);
$em->flush($entity);
Run Code Online (Sandbox Code Playgroud)
那扔了一个'InvalidArgumentException' with message 'Entity has to be managed for single computation.
我可以使用DQL来删除; 只是想知道是否有办法通过实体经理来做到这一点.
我正在使用'滚动'cURL多实现(就像这篇SO帖子,基于这个cURL代码).它可以同时使用多达100个请求来处理数千个URL,其中5个脚本实例作为守护进程运行(是的,我知道,这应该用C语言编写).
这是问题:处理完~200,000 url(在5个实例中)curl_multi_exec()似乎打破了脚本的所有实例.我已经尝试关闭脚本,然后重新启动,同样的事情发生(不是在200,000网址后,但在重新启动时),脚本挂起调用curl_multi_exec().
我把脚本放到'单一'模式,处理一个常规的cURL句柄,并且工作正常(但它不是我需要的速度).我的日志记录让我怀疑它可能遇到了缓慢/有问题的连接(因为它似乎经常在URL上处理然后再次挂起),但这意味着我CURLOPT_TIMEOUT的个别句柄被忽略了.或者也许只是通过cURL运行那么多请求的东西.
有人听说过这样的事吗?
示例代码(再次基于此):
//some logging shows it hangs right here, only looping a time or two
//so the hang seems to be in the curl call
while(($execrun =
curl_multi_exec($master, $running)) == CURLM_CALL_MULTI_PERFORM);
//code to check for error or process whatever returned
Run Code Online (Sandbox Code Playgroud)
我已CURLOPT_TIMEOUT设置120,但在curl_multi_exec()最终返回一些数据的情况下,它是在等待10分钟后.
我有一堆测试/检查还没有做,但想到也许这可能会敲响一个人.
我正在寻找一个适用于Zend Server(CE)的PHP分析器.据我所知,XDebug很难用Zend Server进行设置.虽然Zend Debugger是免费的(据我所知),但Profiler仅在Zend Studio上.
还有其他选择吗?
相关问题:使用短路评估的好处,为什么语言不能使用短路评估?,有人可以解释这行代码吗?(逻辑和分配运营商)
关于使用短路代码的语言的好处有疑问,但我想知道程序员有什么好处?只是它可以使代码更简洁一点吗?还是有性能原因?
我不是在询问有关两个实体需要进行评估的情况,例如:
if($user->auth() AND $model->valid()){
$model->save();
}
Run Code Online (Sandbox Code Playgroud)
对我而言,原因很清楚 - 既然两者都必须成立,那么如果用户无法保存数据,您可以跳过更昂贵的模型验证.
这对我来说也有明显的目的:
if(is_string($userid) AND strlen($userid) > 10){
//do something
};
Run Code Online (Sandbox Code Playgroud)
因为strlen()使用非字符串值调用是不明智的.
我想知道的是当它不影响任何其他语句时使用短路代码.例如,从Zend Application默认索引页面:
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Run Code Online (Sandbox Code Playgroud)
这可能是:
if(!defined('APPLICATION_PATH')){
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
}
Run Code Online (Sandbox Code Playgroud)
或者甚至作为一个声明:
if(!defined('APPLICATION_PATH'))
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Run Code Online (Sandbox Code Playgroud)
那么为什么要使用短路代码呢?仅仅因为使用逻辑运算符代替控制结构的"酷"因素?要合并嵌套的if语句?因为它更快?
我在 Doctrine2 中使用单表继承来存储多个服务的 OAuth 凭据。我想使用服务的 id 作为主键;然而,这并不是所有服务中唯一的。
我已经将数据库设置为使用鉴别器列和服务的 id 作为主键,但是我找不到一种方法让 Doctrine 使用鉴别器列作为键(除了鉴别器列)。我正在使用 docblock 注释,如果我将鉴别器列添加为 @Id 字段,则会出现错误:
Duplicate definition of column...in a field or discriminator column mapping.
Run Code Online (Sandbox Code Playgroud)
如果我只将该字段定义为鉴别器列,则任何重叠的服务 ID 都会更新所有匹配的行。
无论如何要完成这项工作,除了使用自动生成的 it 值?
php ×7
orm ×3
doctrine-orm ×2
oop ×2
apache ×1
codeigniter ×1
coding-style ×1
curl ×1
datamapper ×1
file ×1
geolocation ×1
http ×1
mysql ×1
profiler ×1
sorting ×1
soundex ×1
zend-server ×1