小编Tim*_*tle的帖子

使用数据映射器模式,实体(域对象)是否应该了解Mapper?

我是第一次使用Doctrine2,但我认为这个问题非常通用,不依赖于特定的ORM.

Data Mapper模式中的实体是否应该知道并使用 Mapper

我有几个具体的例子,但它们似乎都归结为同样的一般性问题.

如果我正在处理来自外部源的数据 - 例如a User有很多Messages- 并且外部源只提供最新的几个实体(如RSS提要),$user->addMessage($message)除非它知道Mapper,否则如何检查重复项,或者它通过集合"搜索"(似乎是一件低效的事情).

当然,控制器或事务脚本可以在将消息添加到用户之前检查重复项 - 但这似乎不太正确,并且会导致代码重复.

如果我有一个大型集合 - 再次User有很多Messages- User实体如何为集合提供限制和分页而不实际代理Mapper调用?

同样,控制器或交易脚本或任何使用实体可以直接使用映射来检索集合UserMessages通过次数,日期范围或其他因素的限制-而这也将导致代码重复.

答案是使用存储库并让实体知道它们吗?(至少对于Doctrine2,以及其他ORM使用的类似概念.)此时,实体仍然与Mapper相对分离.

php oop orm design-patterns datamapper

11
推荐指数
1
解决办法
3195
查看次数

按Soundex排序(或类似)`Closeness`

有没有办法让MySQL订单结果与搜索词的"声音"有多接近?

我正在尝试订购包含城市名称用户输入的字段.存在变化和拼写错误,我想在顶部显示"最接近的"匹配.

我知道soundex可能不是最好的算法,但如果它(或其他方法)可以合理地成功 - 可能值得对数据库进行排序.

mysql sorting soundex

8
推荐指数
1
解决办法
2554
查看次数

是否可以从HTTP请求获得(粗略)移动电话位置

如果内存正确地为我服务,谷歌会为地图站点执行此操作.我知道谷歌的移动地图应用程序可以确定粗略的位置(我假设使用某种类型的单元塔查找),但我似乎记得该网站在移动浏览器上查看时有点接近当前位置.

任何人都知道如何/如果可能的话?IP地址是否根据塔或区域而变化(看起来他们会使用某种常见的运营商网关)?

http geolocation

7
推荐指数
1
解决办法
1万
查看次数

CodeIgniter项目给出303 /压缩错误

尝试为本地开发(LAMP堆栈)设置基于CodeIgniter的项目,并且一旦所有配置文件都更新(意味着我成功地为CodeIgniter创建了有意义的引导错误),我在浏览器中收到此错误:

  • 错误330(net :: ERR_CONTENT_DECODING_FAILED):未知错误.
  • 火狐
    内容编码错误:您尝试查看的页面无法显示,因为它使用的是无效或不受支持的压缩形式.

只是使用wget来获取文件工作正常,没有错误,我得到了我期待的内容.不确定这是CI和服务器的问题,还是项目的奇怪之处.谁看过这个吗?

php apache codeigniter

7
推荐指数
2
解决办法
7338
查看次数

当php:// temp被多次打开时会发生什么?

如果多次打开php://temp(或php://memory)文件,句柄是否指向同一个文件?或者每个句柄都是独特的吗?

我在php文档中找不到答案,所以我要编写一个测试脚本来查找.我认为值得在这里询问,以便其他人可以轻松找到答案.

php file

7
推荐指数
1
解决办法
509
查看次数

Doctrine2刷新一个被删除的实体

尝试删除实体,而不保留其他更改.请注意(虽然在这种特定情况下并不是真的需要),但该方法不应影响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来删除; 只是想知道是否有办法通过实体经理来做到这一点.

php orm doctrine-orm

7
推荐指数
1
解决办法
8169
查看次数

cURL多挂/忽略超时

我正在使用'滚动'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分钟后.

我有一堆测试/检查还没有做,但想到也许这可能会敲响一个人.

php curl

6
推荐指数
2
解决办法
9528
查看次数

Zend Server的Profiler(Zend Debugger)

我正在寻找一个适用于Zend Server(CE)的PHP分析器.据我所知,XDebug很难用Zend Server进行设置.虽然Zend Debugger是免费的(据我所知),但Profiler仅在Zend Studio上.

还有其他选择吗?

php profiler zend-server

6
推荐指数
1
解决办法
3021
查看次数

为什么要使用短路代码?

相关问题:使用短路评估的好处,为什么语言不能使用短路评估?,有人可以解释这行代码吗?(逻辑和分配运营商)

关于使用短路代码的语言的好处有疑问,但我想知道程序员有什么好处?只是它可以使代码更简洁一点吗?还是有性能原因?

我不是在询问有关两个实体需要进行评估的情况,例如:

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语句?因为它更快?

coding-style short-circuiting code-structure

5
推荐指数
1
解决办法
3076
查看次数

鉴别器列可以成为 Doctrine2 中主键的一部分吗?

我在 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 oop orm single-table-inheritance doctrine-orm

5
推荐指数
1
解决办法
3287
查看次数