标签: doctrine-orm

在Doctrine 2.0实体中使用EntityManager

我有2个实体:Country(id,name)和Mapping(id,object,internalId,externalId).国家和地图未与关联相关联(因为"映射"不仅包含国家/地区的行).我需要使用以下条件获取国家/地区的外部ID:

  • country.id = mapping.internalId
  • mapping.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)

问题:

  1. 在实体中使用EntityManager是一种好习惯吗?如果不是,请解释如何在我的情况下获得外部身份证?
  2. 也许可以使用yaml文件关联Country和Mapping?

提前致谢!

entitymanager doctrine-orm

33
推荐指数
3
解决办法
3万
查看次数

Doctrine2转换错误

"Doctrine2&Symfony2"中的这个错误是什么意思?

无法将数据库值""转换为Doctrine Type数组

symfony doctrine-orm

33
推荐指数
2
解决办法
2万
查看次数

Doctrine2一对一关系自动加载查询

我有一个看起来像这样的查询:

我的用户实体具有一对一的关系,如下所示:

/**
 * @var UserProfile
 *
 * @ORM\OneToOne(targetEntity="UserProfile",mappedBy="user")
 */
private $userProfile;
Run Code Online (Sandbox Code Playgroud)

每当我进行查询以选择多个用户对象时,它会为每个用户创建一个额外的select语句来查询UserProfile数据,即使我没有通过get方法访问它.我并不总是需要UserProfile数据,我当然不希望每次显示用户列表时都加载这些数据.

知道为什么这些查询在运行时执行?

doctrine-orm

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

将列添加到Symfony中的现有实体

我一直在我的网络服务器上玩Symfony,我一直在为我的数据库创建带有学说的实体.我想为这些实体中的一个添加一个列......我想做类似的事情:

php app/console doctrine:modify:entity
Run Code Online (Sandbox Code Playgroud)

现在我知道这个命令不存在,但有一种方法(不进行整个迁移)只需添加一个列.

PS我知道我可以打开php文件并在那里以文本方式添加列然后更新架构,但我将它分发给一些客户端,我喜欢更像"命令行"的方法.

php symfony doctrine-orm

33
推荐指数
3
解决办法
6万
查看次数

如何将一个带有Doctrine 2的INDEX添加到列而不将其作为主键?

我想index在MySQL数据库中添加一个表列.我正在使用Doctrine 2来创建我的数据库方案.

我知道我可以用

/** @Id @Column(type="integer") */
Run Code Online (Sandbox Code Playgroud)

创建主键.但我的专栏既unique没有primary key属性也没有属性.它应该只是index在我的表中(MySQL知道这三种类型).

创建这样一个索引的正确陈述是什么?

mysql indexing doctrine-orm

33
推荐指数
5
解决办法
4万
查看次数

Symfony 2.7 cache:clear命令检查每个数据库连接

我刚刚升级到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

php symfony doctrine-orm

33
推荐指数
1
解决办法
7311
查看次数

从DB生成Symfony2灯具?

是否可以从Symfony2/Doctrine中的现有数据库生成灯具?我怎么能这样做?

例:

我已经定义了15个实体,我的symfony2应用程序正在运行.现在有些人可以浏览到该应用程序,并且使用它已经插入了大约5000行,直到现在.现在我希望插入的东西作为固定装置,但我不想手工完成.如何从数据库生成它们?

fixtures symfony doctrine-orm

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

如何在Doctrine2的查询结果中获取Collection

我试图使用doctrine2执行查询,并需要它返回一个集合对象.

简化代码段:

$players = $this->getEntityManager()
    ->createQueryBuilder()
    ->select('p')
    ->from('...\Player', 'p')
    ->getQuery()
    ->getResult();
Run Code Online (Sandbox Code Playgroud)

返回的对象是Player的数组.

有关查询结果格式的信息说:

结果是对象的简单集合(纯)或对象嵌套在结果行(混合)中的数组.

结果类型取决于什么以及如何获得集合对象?

doctrine doctrine-orm

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

Doctrine OneToOne不正确?生成一个独特的索引

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)

有任何想法吗?我似乎无法找到任何关于此的内容.

谢谢

symfony doctrine-orm

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

如何随机选择学说

以下是我在数据库中查询某些单词的方法

$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之后添加偏移量.

知道如何实现这一目标吗?

php dql doctrine-orm

32
推荐指数
6
解决办法
5万
查看次数

标签 统计

doctrine-orm ×10

symfony ×5

php ×3

doctrine ×1

dql ×1

entitymanager ×1

fixtures ×1

indexing ×1

mysql ×1