标签: doctrine-orm

Symfony2 Controller不会捕获异常

这是我删除操作的路由处理程序.只要该项目没有任何关联,它就能很好地工作.

public function projectDeleteAction()
{
    try {
        $request = $this->get('request');
        $my_id = $request->query->get('id');

        $em = $this->get('doctrine.orm.entity_manager');

        $item = $em->find('MyBundle:Main', $my_id);

        $em->remove($item);
        $em->flush();

        $info = $item->getName();
        $result = 0;
    }
    catch (Exception $e) {
        $info = toString($e);
        $result = -1;
    }

    return $this->render('MyBundle:Main:response.xml.twig',
            array('info' => $info, 'result' => $result ));
}
Run Code Online (Sandbox Code Playgroud)

我已经解决了尝试删除带关联的项的错误,但是通过这个过程,"flush"抛出了PDOException.我尝试了各种方法来捕获它,但它似乎被Symfony2内部捕获,然后它响应HTTP 500错误.有没有办法我可以让Symfony2没有抓住这个,以便我可以处理它?这是一个使用AJAX的XML响应,所以我宁愿只发送一个错误代码.

php symfony doctrine-orm

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

使用没有实体类的本机SQL查询

我需要使用几个联合和子查询创建本机SQL查询.它看起来大致如下:

SELECT res.id, COUNT(*) as count_ids
FROM (
    SELECT a.id FROM ... a WHERE ... LIKE ('%:param%')
    UNION ALL
    SELECT b.id FROM ... b WHERE ... LIKE ('%:param%')
    UNION ALL
    ...
) res
GROUP BY res.id
ORDER BY count_ids asc
Run Code Online (Sandbox Code Playgroud)

结果将不匹配我在我的应用程序中使用的任何实体.是否可以ResultSetMapping使用"匿名"对象创建?或者至少可以创建一个实体,下次我更新架构时不会创建表,所以我可以将结果映射到它?

或者是否有任何其他Doctrine友好的方式来处理这样的查询?但是,对数据库进行更改是不可能的,因为我正在处理无法触及的遗留内容.如果我在数据库方面做了所有事情,并且不涉及大量PHP,我也非常喜欢.

php symfony doctrine-orm

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

学说2:如何将除一个对象之外的所有值克隆到另一个对象上?

在$ entity变量中,有一个与$ other_address类型相同的对象,但填充了所有字段值.

我想将$ other_address对象中的所有字段设置为与$ entity对象具有完全相同的值.

这是否可以少于N行,其中N是我需要设置的字段数?

我试过"克隆"关键字,但它没有用.

这是代码.

                $other_address = $em->getRepository('PennyHomeBundle:Address')
          ->findBy(array('user' => $this->get('security.context')->getToken()->getUser()->getId(), 'type' => $check_type));
                $other_address = $other_address[0];


                //I want to set all values in this object to have values from another object of same type
                $other_address->setName($entity->getName());
                $other_address->setAddress1($entity->getAddress1());
                $other_address->setAddress2($entity->getAddress2());
                $other_address->setSuburbTown($entity->getSuburbTown());
                $other_address->setCityState($entity->getCityState());
                $other_address->setPostZipCode($entity->getPostZipCode());
                $other_address->setPhone($entity->getPhone());
                $other_address->setType($check_type);
Run Code Online (Sandbox Code Playgroud)

doctrine symfony doctrine-orm

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

Doctrine2:如何将所有表设置为与UTF8进行整理

我正在使用Sytrfony2的Doctrine.我的config.yml文件看起来像这样: -

学说配置

doctrine:
    dbal:
        driver: %database_driver%
        host: %database_host%
        port: %database_port%
        dbname: %database_name%
        user: %database_user%
        password: %database_password%
        charset: UTF8
Run Code Online (Sandbox Code Playgroud)

不幸的是我的表没有整理到我试过的UTF8_general_ci或UTF8_unicode_ci

collate: utf8_unicode_ci
Run Code Online (Sandbox Code Playgroud)

但是Doctrine2并不承认这个选择.

我怎样才能实现同样的目标?

symfony doctrine-orm

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

学说2 - 浮点数上的2位小数?

注解:

/**
 * @ORM\Column(type="float", scale="2")
 */
protected $curr_price;
Run Code Online (Sandbox Code Playgroud)

我正在使用它与Symfony 2.

并且此字段在MySQL数据库中变为双精度而不是具有2点精度的浮点数.

我究竟做错了什么?我尝试删除数据库,重新插入等...

mysql symfony doctrine-orm

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

在Symfony2中实现更改密码

在Symfony2中实现更改密码功能的最佳方法是什么?现在我正在使用这个:

$builder->add('password', 'repeated', array(
    'first_name' => 'New password',
    'second_name' => 'Confirm new password',
    'type' => 'password'
));
Run Code Online (Sandbox Code Playgroud)

出于安全原因,它还应包含当前密码检查.

注意:我没有使用FOSUserBundle.

forms security symfony doctrine-orm

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

doctrine2中的子查询notIN函数

我想选择没有特定服务的会员.我有3张桌子:

  • membre
  • service
  • membre_service(membre和之间的关系service)

我正在使用doctrine 2,在SQL中我的查询是:

SELECT m.* FROM membre m WHERE m.`id` NOT IN (
    SELECT ms.membre_id FROM membre_service ms WHERE ms.service_id != 29
)
Run Code Online (Sandbox Code Playgroud)

在Doctrine,我做:

$qb  = $this->_em->createQueryBuilder();
$qb2 = $qb;
$qb2->select('m.id')
        ->from('Custom\Entity\MembreService', 'ms')
        ->leftJoin('ms.membre', 'm')
        ->where('ms.id != ?1')
        ->setParameter(1, $service);

    $qb  = $this->_em->createQueryBuilder();
    $qb->select('m')
        ->from('Custom\Entity\Membre', 'm')
        ->where($qb->expr()->notIn('m.id', $qb2->getDQL())
    );
    $query  = $qb->getQuery();
    //$query->useResultCache(true, 1200, __FUNCTION__);

    return $query->getResult();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

语义错误]第0行,第123页'm WHERE ms.id'附近:错误:'m'已经定义.

php query-builder doctrine-orm

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

将MySQL转换为Doctrine查询生成器.IF和CONCAT的问题.或者选择子查询的另一种方法

我有一个表格用于我的类别,每个类别都有和id,name和parent_id.

Select IF(a.parent_id IS NULL, a.name, CONCAT((SELECT b.name FROM category b WHERE b.id = a.parent_id), " / ", a.name) ) as n, a.id, a.parent_id
FROM category a
ORDER BY n
Run Code Online (Sandbox Code Playgroud)

我想将它转换为我的Doctrine2查询生成器

    $em = $this->getDoctrine()->getEntityManager();
    $qb = $em->createQueryBuilder();
    $q = $qb
            ->select("c.id")
            ->addSelect(
                "IF(c.parent_id IS NULL, c.name, CONCAT((" .
                $em->createQueryBuilder()
                   ->select("t.name")
                   ->from("MyBundle:Category", "t")
                   ->getQuery()->getDQL() .
                "), \" / \", c.name) )"
            )
            ->from("MyBundle:Category", "c");
    echo $q->getQuery()->getSQL();
    exit;
Run Code Online (Sandbox Code Playgroud)

类似的东西,但我不能使用IF,和CONCAT.

mysql doctrine symfony doctrine-orm

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

如何停止Doctrine2 Migrations:Diff总是添加数据库中已存在的外键关系?

我正在使用doctrine2和symfony2.1项目.我有一个与其他表有多对多关系的实体.这些多对一的外键关系已在数据库中更新,但每次运行迁移时:diff或schema:update --dump-sql都会添加相同的更新命令以再次添加外键关系.当我运行schema时:验证它说我的映射与我的数据库不同步.

我的应用程序工作正常,关系正常工作,我的数据库中的架构看起来正确.为什么教条还在尝试添加这些外键?

这是我的代码(对于一个有问题的参数):

在我的"Ticket"实体中,我有:

/**
 * Authenticated User who scored the ticket. 
 *
 * @ORM\ManyToOne(targetEntity="CS\SecurityBundle\Entity\User")
 * @ORM\JoinColumn(name="scoring_user_id", referencedColumnName="id")
 */
protected $scoringUser;
Run Code Online (Sandbox Code Playgroud)

我目前将其设置为单向,因此User实体中没有inversedBy.

这会在我的迁移或模式中生成以下内容:更新转储,即使它已在数据库中:

$this->addSql("ALTER TABLE tickets ADD CONSTRAINT FK_54469DF4BB0D9452 FOREIGN KEY (scoring_user_id) REFERENCES users (id)");
Run Code Online (Sandbox Code Playgroud)

知道我在这里做错了吗?

php mysql symfony doctrine-orm doctrine-migrations

24
推荐指数
1
解决办法
2042
查看次数

在Doctrine2中为DECIMAL类型定义注释的正确方法是什么

我的表中有一列,我DECIMAL(19,4)正在为项目创建实体,定义这个字段的正确方法是什么?什么精度规模的参数意味着主义注解

symfony doctrine-orm

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