我有2个实体:Country(id,name)和Mapping(id,object,internalId,externalId).国家和地图未与关联相关联(因为"映射"不仅包含国家/地区的行).我需要使用以下条件获取国家/地区的外部ID:
country.id = mapping.internalIdmapping.object = 'country'所以我计划在Country中添加函数getExternalId()
function getExternalId() {
$em = Registry::getEntityManager();
$mapping = $em->getRepository('Mapping')->findOneBy(array(
'object' => 'country',
'internalId' => $this->getId()
));
return !empty($mapping) ? $mapping->getExternalId() : false;
}
Run Code Online (Sandbox Code Playgroud)
问题:
提前致谢!
"Doctrine2&Symfony2"中的这个错误是什么意思?
无法将数据库值""转换为Doctrine Type数组
我有一个看起来像这样的查询:
我的用户实体具有一对一的关系,如下所示:
/**
* @var UserProfile
*
* @ORM\OneToOne(targetEntity="UserProfile",mappedBy="user")
*/
private $userProfile;
Run Code Online (Sandbox Code Playgroud)
每当我进行查询以选择多个用户对象时,它会为每个用户创建一个额外的select语句来查询UserProfile数据,即使我没有通过get方法访问它.我并不总是需要UserProfile数据,我当然不希望每次显示用户列表时都加载这些数据.
知道为什么这些查询在运行时执行?
我一直在我的网络服务器上玩Symfony,我一直在为我的数据库创建带有学说的实体.我想为这些实体中的一个添加一个列......我想做类似的事情:
php app/console doctrine:modify:entity
Run Code Online (Sandbox Code Playgroud)
现在我知道这个命令不存在,但有一种方法(不进行整个迁移)只需添加一个列.
PS我知道我可以打开php文件并在那里以文本方式添加列然后更新架构,但我将它分发给一些客户端,我喜欢更像"命令行"的方法.
我想index在MySQL数据库中添加一个表列.我正在使用Doctrine 2来创建我的数据库方案.
我知道我可以用
/** @Id @Column(type="integer") */
Run Code Online (Sandbox Code Playgroud)
创建主键.但我的专栏既unique没有primary key属性也没有属性.它应该只是index在我的表中(MySQL知道这三种类型).
创建这样一个索引的正确陈述是什么?
我刚刚升级到symfony 2.7,并且有令人讨厌的行为.
我的config.yml中的某些连接是可选项,并描述了不打算在每个prod实例中使用的外部数据库.
在执行缓存时:清除,现在似乎检查了每个连接,即使我不希望它们在特定服务器上处于活动状态.
设置--no-warmup选项时,问题发生的时间是一半
php app/console cache:clear --env=prod --no-warmup --verbose
Run Code Online (Sandbox Code Playgroud)
[Doctrine\DBAL\Exception\ConnectionException]
驱动程序中发生异常:SQLSTATE [42000] [1049]未知数据库'bal_syncrho_database'异常跟踪:()at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:103 Doctrine\DBAL\Driver\AbstractMySQLDriver-> convertException()at/var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:133 Doctrine\DBAL\DBALException :: driverException()at/var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver /PDOMySql/Driver.php:47 Doctrine\DBAL\Driver\PDOMySql\Driver-> connect()at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:360 Doctrine\DBAL/connection-> connect()at /var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:429 Doctrine\DBAL\Connection-> getDatabasePlatformVersion()at/var/www/ror3//var/www/ror3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php :328 Doctrine\DBAL\Connection-> getDatabasePlatform()at/var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFact ory.php:763 Doctrine\ORM\Mapping\ClassMetadataFactory-> getTargetPlatform()at /var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:616 Doctrine\ORM\Mapping\ClassMetadataFactory-> completeIdGeneratorMapping()位于/ var/www的/var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:174 Doctrine\ORM\Mapping\ClassMetadataFactory-> doLoadMetadata() /ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:332 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory-> loadMetadata()at/var/www/ror3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:78 Doctrine\ORM\Mapping\ClassMetadataFactory-> loadMetadata()at/var/www/ror3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping /AbstractClassMetadataFactory.php:216在Doc var/www/www/ror3/vendor/doctrine/common/lib/Doctrine/Common stence/Mapping/AbstractClassMetadataFactory.php:115 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory-> getAllMetadata()at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/CacheWarmer/ProxyCacheWarmer.php :69/Symfony\Bridge\Doctrine\CacheWarmer\ProxyCacheWarmer-> warmUp()at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/CacheWarmer/CacheWarmerAggregate.php:48 Symfony\Component\HttpKernel\cacheWarmer\CacheWarmerAggregate-> warmUp()at /var/www/ror3/app/bootstrap.php.cache:2641 Symfony\Component\HttpKernel\Kernel-> initializeContainer()at/var/www/ror3/app/bootstrap. php.cache:2411 Symfony\Component\HttpKernel\Kernel-> boot()at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:70 Symfony\Bundle\FrameworkBundle\Console\Application-> doRun()at /var/www/ror3/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:120 Symfony\Component\Console\Application-> run()at
在/ var/WWW/ror3 /应用/ 控制台:27
是否可以从Symfony2/Doctrine中的现有数据库生成灯具?我怎么能这样做?
例:
我已经定义了15个实体,我的symfony2应用程序正在运行.现在有些人可以浏览到该应用程序,并且使用它已经插入了大约5000行,直到现在.现在我希望插入的东西作为固定装置,但我不想手工完成.如何从数据库生成它们?
我试图使用doctrine2执行查询,并需要它返回一个集合对象.
简化代码段:
$players = $this->getEntityManager()
->createQueryBuilder()
->select('p')
->from('...\Player', 'p')
->getQuery()
->getResult();
Run Code Online (Sandbox Code Playgroud)
返回的对象是Player的数组.
有关查询结果格式的信息说:
结果是对象的简单集合(纯)或对象嵌套在结果行(混合)中的数组.
结果类型取决于什么以及如何获得集合对象?
SchemaTool为OneToOne的关联生成唯一索引.我认为这是不正确的.
Doctrine的"关联"手册页的第6.6节显示了一个产品的OneToOne有一个送货的示例.这显示为生成Product表:
CREATE TABLE Product (
id INT AUTO_INCREMENT NOT NULL,
shipping_id INT DEFAULT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
但是,对于我的实体使用相同的代码,用户有一个组织,我的用户表SQL生成为
CREATE TABLE User (
id INT AUTO_INCREMENT NOT NULL,
organisation_id INT DEFAULT NULL,
UNIQ_3B978F9FA7F43455 (organisation_id),
PRIMARY KEY(id)
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
这可以防止我添加2个具有相同组织的用户.不正确.
我添加了尝试使用唯一的JoinColumn注释参数的详细信息.
@JoinColumn(name="organisation_id", referencedColumnName="id", unique="false")
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我似乎无法找到任何关于此的内容.
谢谢
以下是我在数据库中查询某些单词的方法
$query = $qb->select('w')
->from('DbEntities\Entity\Word', 'w')
->where('w.indictionary = 0 AND w.frequency > 3')
->orderBy('w.frequency', 'DESC')
->getQuery()
->setMaxResults(100);
Run Code Online (Sandbox Code Playgroud)
我正在使用mysql,我想获得符合条件的随机行,我会在查询中使用rand()命令.
我发现这个类似的问题基本上表明,因为在学说中不支持ORDER BY RAND,你可以随机化主键.但是,这不能在我的情况下完成,因为我有一个搜索条件和一个where子句,以便不是每个主键都满足该条件.
我还发现了一个代码片段,建议你使用OFFSET随机化行,如下所示:
$userCount = Doctrine::getTable('User')
->createQuery()
->select('count(*)')
->fetchOne(array(), Doctrine::HYDRATE_NONE);
$user = Doctrine::getTable('User')
->createQuery()
->limit(1)
->offset(rand(0, $userCount[0] - 1))
->fetchOne();
Run Code Online (Sandbox Code Playgroud)
我有点困惑的是,这是否会帮助我解决在我的情况下随机缺乏对订单的支持.我无法在setMaxResult之后添加偏移量.
知道如何实现这一目标吗?