这是我删除操作的路由处理程序.只要该项目没有任何关联,它就能很好地工作.
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响应,所以我宁愿只发送一个错误代码.
我需要使用几个联合和子查询创建本机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,我也非常喜欢.
在$ 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) 我正在使用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并不承认这个选择.
我怎样才能实现同样的目标?
注解:
/**
* @ORM\Column(type="float", scale="2")
*/
protected $curr_price;
Run Code Online (Sandbox Code Playgroud)
我正在使用它与Symfony 2.
并且此字段在MySQL数据库中变为双精度而不是具有2点精度的浮点数.
我究竟做错了什么?我尝试删除数据库,重新插入等...
在Symfony2中实现更改密码功能的最佳方法是什么?现在我正在使用这个:
$builder->add('password', 'repeated', array(
'first_name' => 'New password',
'second_name' => 'Confirm new password',
'type' => 'password'
));
Run Code Online (Sandbox Code Playgroud)
出于安全原因,它还应包含当前密码检查.
注意:我没有使用FOSUserBundle.
我想选择没有特定服务的会员.我有3张桌子:
membreservicemembre_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'已经定义.
我有一个表格用于我的类别,每个类别都有和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.
我正在使用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)
知道我在这里做错了吗?
我的表中有一列,我DECIMAL(19,4)正在为项目创建实体,定义这个字段的正确方法是什么?什么精度和规模的参数意味着主义注解?