(请参阅下面我的编辑以获得更好的问题) 如何仅使用通用的 symfony1.4 任务来控制选择哪个连接(从 database.yml 中的正确环境部分) Doctrine_Query::create()
创建查询?
我正在使用看起来像这样的 database.yml:
prod:
doctrine:
class: sfDoctrineDatabase
param:
dsn: mysql://some:pass@domain:port/database
log:
class: sfDoctrineDatabase
param:
dsn: mysql://some:pass@domain:port/database
auth:
class: sfDoctrineDatabase
param:
dsn: mysql://some:pass@domain:port/database
dev:
doctrine:
class: sfDoctrineDatabase
param:
dsn: mysql://some:otherpass@domain:port/database
log:
class: sfDoctrineDatabase
param:
dsn: mysql://some:otherpass@domain:port/database
auth:
class: sfDoctrineDatabase
param:
dsn: mysql://some:otherpass@domain:port/database
而且我希望能够控制在调用类似以下内容时使用这些数据库定义中的哪一个:
$query = Doctrine_Query::create()
->select('*')
->from('Products p')
->where('p.id = ?', $productID)
->limit(1);
$OfpFlPr = $query->execute()->getFirst();
目前我无法像这样设置连接$query = Doctrine_Query::create($conn);
。
如有任何帮助,我们将不胜感激!
编辑:
我在使用 Doctrine_Query::create()
的软件中有很多更深层次的代码(没有连接参数)。好像是通过web请求来选择合适的环境和连接。但我不知道它是如何做到这一点的,所以我可以让我的CLI 命令 以同样的方式工作(它们目前没有选择正确的连接和环境)。这就是为什么我需要知道如何控制“自动”使用哪个连接(默认选择)。
问题:
所以我想最后我的问题是:
当代码作为 symfony CLI 命令执行时,我如何控制在使用 Doctrine_Query::create()
的较低级别代码中默认选择哪个连接?
最佳答案
$query = Doctrine_Query::create($doctrineManager->getConnection('doctrine'))
->select('*')
->from('Products p')
->where('p.id = ?', $productID)
->limit(1);
应该可以。根据您从何处选择 Product
,参数可能是“doctrine”、“log”或“auth”。
您能详细说明一下为什么您“无法设置连接”吗?
编辑:
所以如果我做对了,你喜欢在 cli 命令中指定环境,以使用 database.yml
中右侧部分的 dsn
连接字符串。您可以为您的 cli 命令使用 env
选项来执行此操作。您可能需要添加类似
$this->addOption('env', null, sfCommandOption::PARAMETER_OPTIONAL, 'Specify environment', 'prod');
到任务配置。
关于php - 如何控制在 symfony1.4 任务中从 database.yml 中选择哪个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33503852/