是否可以通过以下类似的方式更新实体:
$data = new ATest(); // my entity
$data->id = 1; // id 1 already exists, I just want to update this row
$data->name = "ORM Tested"; // changed the name
$entityManager->persist($data);
$entityManager->flush();
Run Code Online (Sandbox Code Playgroud)
这将插入并更改对象的id,而不是更新数据库中的现有行.
我对测试世界很陌生,我想确保我走在正确的轨道上.
我正在尝试使用phpunit在symfony2项目中设置单元测试.
PHPUnit正在运行,简单的默认控制器测试工作正常.(但这不是关于功能测试,而是单元测试我的应用程序.)
我的项目在很大程度上依赖于数据库交互,据我所知,从phpunit的文档中,我应该建立一个基于类的类\PHPUnit_Extensions_Database_TestCase,然后为我的数据库创建fixtures并从那里开始工作.
然而,symfony2只提供了一个WebTestCase只从\PHPUnit_Framework_TestCase开箱即用的类.
所以我是正确的,我认为我应该创建自己的DataBaseTestCase主要复制WebTestCase,唯一的区别是它扩展\PHPUnit_Extensions_Database_TestCase并实现其所有抽象方法?
或者是否有另一个"内置"推荐的symfony2工作流程涉及以数据库为中心的测试?
由于我想确保我的模型存储和检索正确的数据,我不想最终意外地测试学说的细节.
我想在Doctrine2实体定义的列中添加一个列描述(也称为" 注释 "),但是在@Column annotation没有破坏Doctrine的SchemaTool 的情况下无法找到有关如何使用它的任何信息.
如果我使用类似的columnDefinition属性@Column annotation
@Column(type="string" columnDefinition="COMMENT 'This is a column comment'")
Run Code Online (Sandbox Code Playgroud)
在注释中引用美国
如果使用"columnDefinition",SchemaTool将不再正确检测列的更改.
那么有没有办法在不破坏SchemaTool的情况下定义列描述?
我得到的唯一线索是这个拉动请求,结尾于" 这是以不同的方式解决的 ".
提前致谢.
我正在尝试使用Doctrine从本机查询返回单行.这是我的代码:
$rsm = new ResultSetMapping;
$rsm->addEntityResult('VNNCoreBundle:Player', 'p');
$rsm->addFieldResult('p', 'player_id', 'id');
$sql = "
SELECT player_id
FROM players p
WHERE CONCAT(p.first_name, ' ', p.last_name) = ?
";
$query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
$query->setParameter(1, $name);
$players = $query->getResult();
Run Code Online (Sandbox Code Playgroud)
最后一行返回一个玩家列表,但我只想要一个结果.我怎么做?
我想开始使用Zend Framework进行开发,我想使用zf2.由于我使用的是Doctrine 2,你能否建议一些教程来帮助我将它集成到zf2中?谢谢!
我是Symfony2(beta4)和Doctrine的新手,当我尝试通过命令行创建数据库模式时遇到问题.
这是错误:
$ php app/console doctrine:schema:create
Creating database schema...
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
[ErrorException]
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock)
in /Applications/MAMP/htdocs/sf-test-2/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php line 36
Run Code Online (Sandbox Code Playgroud)
mysql数据库设置已正确插入config/parameters.ini文件中.
这是config.yml中的Doctrine配置
# Doctrine Configuration
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
dbname: %database_name%
user: %database_user%
password: %database_password%
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
Run Code Online (Sandbox Code Playgroud)
和实体(我只做一个测试)
<?php
// src/Acme/NewsBundle/Entity/Article.php
namespace Acme\NewsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="articles")
*/
class Article
{
/**
* @ORM\Id
* …Run Code Online (Sandbox Code Playgroud) 我正在使用Doctrine2迁移.我需要一些关于我的疑问的答案,我无法在文件中找到一个好的解决方案
我用:
doctrine migrations:diff // generate migrations files
doctrine migrations:migrate // migrates up to new version
Run Code Online (Sandbox Code Playgroud)
我该如何迁移?指定以前的版本不起作用(没有更新它说fe教义迁移:迁移版本20120211163332它说
Migrating up to Version20120211163332 from 20120309112058
[Doctrine\DBAL\Migrations\MigrationException]
Could not find any migrations to execute.
Run Code Online (Sandbox Code Playgroud)
但它不起来它应该下降!您还可以看到响应中的版本
如果我必须进行一些数据库更新,是否可以添加一些SQL查询(更改一些与其他数据相关的数据)?我没有尝试过,因为失败不起作用:((
有没有办法在浏览器中使用migrate命令?我没有控制台访问共享主机,所以我需要这个功能,而不是逐个复制查询:D在phpMyAdmin
我有这个代码用于查询:
$repository = $em->getRepository('AcmeCrawlerBundle:Trainings');
$query = $repository->createQueryBuilder('p')
->where('p.title LIKE :word')
->orWhere('p.discription LIKE :word')
->setParameter('word', $word)
->getQuery();
$trainings = $query->getResult();
Run Code Online (Sandbox Code Playgroud)
问题是:即使存在匹配项,此查询也找不到它们.我用这段代码来查看完整的sql:
print_r(array(
'sql' => $query->getSQL(),
'parameters' => $query->getParameters(),
));
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
FROM Trainings t0_ WHERE t0_.title LIKE ? OR t0_.discription LIKE ? [parameters] => Array ( [word] => Spoken )
Run Code Online (Sandbox Code Playgroud)
(查询的最后一部分)请告诉我要改变什么?
我该怎么办
WHERE id != 1
Run Code Online (Sandbox Code Playgroud)
在学说?
到目前为止我有这个
$this->getDoctrine()->getRepository('MyBundle:Image')->findById(1);
Run Code Online (Sandbox Code Playgroud)
但我怎么做"不等于"?
这可能是愚蠢的,但我找不到任何参考?
谢谢
如果相当容易,在Symfony中使用基于URL的不同实体管理器/连接.使用以下路由配置
connection:
pattern: /a/{connection}
defaults: { _controller: AcmeTestBundle:User:index }
Run Code Online (Sandbox Code Playgroud)
并从以下食谱;
我的控制器看起来像这样;
class UserController extends Controller
{
public function indexAction($connection)
{
$products = $this->get('doctrine')
->getRepository('AcmeStoreBundle:Product', $connection)
->findAll()
;
..................
Run Code Online (Sandbox Code Playgroud)
我将能够从不同的em/connection /数据库中获取产品信息.
现在,如果我在路由中添加这样的内容;
login:
pattern: /a/{connection}/login
defaults: { _controller: FOSUserBundle:Security:login }
Run Code Online (Sandbox Code Playgroud)
如何轻松地使登录使用连接变量中定义的连接?
此设置假设每个数据库都有自己的用户登录信息(fos_user表).
编辑:更新的路由信息
EDIT2:
我仍然是PHP/Symfony/Doctrine的新手,所以如果我在这里完全错了,请原谅我.我尝试在FOS\UserBundle\Doctrine\UserManager中手动设置连接.以下是该类的构造函数
//
use Doctrine\Common\Persistence\ObjectManager;
//
public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, ObjectManager $om, $class)
{
parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer);
$this->objectManager = $om;
$this->repository = $om->getRepository($class);
$metadata = …Run Code Online (Sandbox Code Playgroud)