标签: doctrine-orm

使用Doctrine 2检查重复键

在进行刷新之前,是否有一种简单的方法可以检查Doctrine 2的重复键?

doctrine doctrine-orm

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

"usort"一个Doctrine\Common\Collections\ArrayCollection?

在各种情况下,我需要Doctrine\Common\Collections\ArrayCollection根据对象中的属性对其进行排序.如果没有找到立即执行的方法,我会这样做:

// $collection instanceof Doctrine\Common\Collections\ArrayCollection
$array = $collection->getValues();
usort($array, function($a, $b){
    return ($a->getProperty() < $b->getProperty()) ? -1 : 1 ;
});

$collection->clear();
foreach ($array as $item) {
    $collection->add($item);
}
Run Code Online (Sandbox Code Playgroud)

我认为这不是最好的方法,你必须将所有内容复制到本机PHP数组并返回.我想知道是否有更好的方式来"使用"a Doctrine\Common\Collections\ArrayCollection.我想念任何文件吗?

php doctrine-orm

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

Doctrine2插入并检索新的插入ID

在Doctrine2中使用以下内容:

$user = array('username' => 'example', 'passsword' => 'changeme');

$conn->insert('users', $user);
Run Code Online (Sandbox Code Playgroud)

那么我如何获得刚刚插入的用户的最后一个ID?如果无法做到这一点,那么如何生成id以便您可以执行以下操作:

$id = //something here.
$user = array('username' => 'example', 'passsword' => 'changeme', 'id' => $id);
$conn->insert('users', $user);
Run Code Online (Sandbox Code Playgroud)

php doctrine-orm

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

使用Doctrine 2自动引用保留字

有没有办法在使用时自动引用Doctrine 2的保留字$entityManager->find('entity', id)

使用查询构建器时可以这样做但是应该有一个全局配置设置来执行此操作吗?我不想在保留字的注释中指定它.

doctrine-orm

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

内存泄漏Symfony2 Doctrine2 /超出内存限制

实际上我对symfony2和doctrine2的组合有很多麻烦.我必须处理大量数据集(大约2-3百万次写入和读取),并且必须做很多额外的工作以避免内存不足.

我找出了2个要点,即"泄漏"内存(它们实际上并没有泄漏,而是分配了很多)

  1. Entitymanager实体存储(我不知道这个的真实名称)似乎它保留了所有处理过的entites,你必须定期清除这个存储

    $entityManager->clear()
  2. Doctrine QueryCache - 它缓存所有使用的查询,我发现的唯一配置是你能够决定你想要使用什么类型的Cache.我没有发现全局禁用每个查询禁用它的有用标志.因此通常使用该函数为每个查询对象禁用它

    $qb = $repository->createQueryBuilder($a);
    $query = $qb->getQuery();
    $query->useQueryCache(false);
    $query->execute();
    

所以..这就是我现在想出来的..我的问题是:

是否有一种简单的方法可以从Entitymanagerstorage中拒绝某些对象?有没有办法在entitymanager中设置querycache?我可以在symonfony doctrine配置中配置这种缓存行为吗?

如果有人对我有一些不错的提示,那将是非常酷的..否则这可能会帮助一些菜鸟......

CYA

orm memory-leaks symfony doctrine-orm

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

将SecurityContext注入Symfony2中的Listener prePersist或preUpdate,以在createBy或updatedBy中获取User导致循环引用错误

我设置了一个监听器类,我将在任何doctrine prePersist上设置ownerid列.我的services.yml文件看起来像这样......

services:
my.listener:
    class: App\SharedBundle\Listener\EntityListener
    arguments: ["@security.context"]
    tags:
        - { name: doctrine.event_listener, event: prePersist }
Run Code Online (Sandbox Code Playgroud)

我的班级看起来像这样......

use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\Security\Core\SecurityContextInterface;

class EntityListener
{

protected $securityContext;

public function __construct(SecurityContextInterface $securityContext)
{
    $this->securityContext = $securityContext;
}


/**
 *
 * @param LifecycleEventArgs $args 
 */
public function prePersist(LifecycleEventArgs $args)
{

    $entity = $args->getEntity();
    $entityManager = $args->getEntityManager();

    $entity->setCreatedby();

}
}
Run Code Online (Sandbox Code Playgroud)

结果是以下错误.

ServiceCircularReferenceException:检测到服务"doctrine.orm.default_entity_manager"的循环引用,路径:"doctrine.orm.default_entity_manager - > doctrine.dbal.default_connection - > my.listener - > security.context - > security.authentication.manager - > fos_user .user_manager".

我的假设是安全上下文已经被注入链中的某个地方,但我不知道如何访问它.有任何想法吗?

php symfony doctrine-orm

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

获取实体类的表名

您知道如何从我的控制器类中的实体声明中获取表名

实体类

<?php

namespace Acme\StoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Acme\StoreBundle\Entity\User
 *
 * @ORM\Table(name="users")
 * @ORM\Entity
 */
class User
Run Code Online (Sandbox Code Playgroud)

我现在想获取User实体的表名,我将如何在Symfony2控制器中执行此操作?

symfony doctrine-orm

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

教条findBy与OR条件

是否可以OR在Doctrine findBy()方法中使用语句?我知道给定的数组被解释为case1 AND case2... 像这样

$this->repos['notif']->findBy(array('status' => 1, 'status' => 2, 'status' => 3);
Run Code Online (Sandbox Code Playgroud)

代表

SELECT * FROM `notif` WHERE status=1 AND status=2 AND status=3;
Run Code Online (Sandbox Code Playgroud)

现在我需要一些东西代表:

SELECT * FROM `notif` WHERE status=1 OR status=2 OR status=3;
Run Code Online (Sandbox Code Playgroud)

有办法获得所有案件吗?

findby doctrine-orm

44
推荐指数
4
解决办法
6万
查看次数

GeneratedValue策略之间的差异

Doctrine文档中,他们提到@GeneratedValue注释存在一些不同的策略:

  • AUTO
  • SEQUENCE
  • TABLE
  • IDENTITY
  • UUID
  • CUSTOM
  • NONE

有人请解释所有人的策略之间的差异吗?

doctrine-orm

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

具有相关实体的深度克隆Doctrine实体

我已经创建了一个实体AOneToMany关系B,这有关系OneToManyC.

我必须克隆此A实体并使用新的id在数据库中设置它.所有深层关系也应该用新的ID来克隆.

我试过的是将Aid 设置为null:

$A = clone $A_original;
$A->setId(null);
$em->persist($A);
Run Code Online (Sandbox Code Playgroud)

它在A表中创建新记录,但不在B和中C.

我该怎么做才能制作完整的A实体副本?

doctrine-orm symfony-2.1

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

标签 统计

doctrine-orm ×10

php ×3

symfony ×3

doctrine ×1

findby ×1

memory-leaks ×1

orm ×1

symfony-2.1 ×1