标签: doctrine-orm

从实体更新的Doctrine 2

是否可以通过以下类似的方式更新实体:

$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,而不是更新数据库中的现有行.

php orm doctrine-orm

43
推荐指数
4
解决办法
7万
查看次数

如何使用PHPUnit在Symfony2中设置数据库密集的单元测试?

我对测试世界很陌生,我想确保我走在正确的轨道上.

我正在尝试使用phpunitsymfony2项目中设置单元测试.

PHPUnit正在运行,简单的默认控制器测试工作正常.(但这不是关于功能测试,而是单元测试我的应用程序.)

我的项目在很大程度上依赖于数据库交互,据我所知,从phpunit的文档中,我应该建立一个基于类的类\PHPUnit_Extensions_Database_TestCase,然后为我的数据库创建fixtures并从那里开始工作.

然而,symfony2只提供了一个WebTestCase只从\PHPUnit_Framework_TestCase开箱即用的类.

所以我是正确的,我认为我应该创建自己的DataBaseTestCase主要复制WebTestCase,唯一的区别是它扩展\PHPUnit_Extensions_Database_TestCase并实现其所有抽象方法?

或者是否有另一个"内置"推荐的symfony2工作流程涉及以数据库为中心的测试?

由于我想确保我的模型存储和检索正确的数据,我不想最终意外地测试学说的细节.

php phpunit symfony doctrine-orm

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

如何在Doctrine2中添加列描述(注释)

我想在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的情况下定义列描述?

我得到的唯一线索是这个拉动请求,结尾于" 这是以不同的方式解决的 ".

提前致谢.

symfony doctrine-orm

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

使用Doctrine NativeQuery获取单行结果

我正在尝试使用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)

最后一行返回一个玩家列表,但我只想要一个结果.我怎么做?

doctrine-orm

42
推荐指数
4
解决办法
10万
查看次数

Zend Framework 2 + Doctrine 2

我想开始使用Zend Framework进行开发,我想使用zf2.由于我使用的是Doctrine 2,你能否建议一些教程来帮助我将它集成到zf2中?谢谢!

php doctrine zend-framework doctrine-orm zend-framework2

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

运行`php app/console doctrine:schema:create`时对"没有这样的文件或目录"进行故障诊断

我是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)

php mysql symfony doctrine-orm

40
推荐指数
4
解决办法
7万
查看次数

Doctrine2迁移向下迁移并从浏览器而不是命令行迁移

我正在使用Doctrine2迁移.我需要一些关于我的疑问的答案,我无法在文件中找到一个好的解决方案

我用:

  doctrine migrations:diff // generate migrations files
  doctrine migrations:migrate // migrates up to new version
Run Code Online (Sandbox Code Playgroud)
  1. 我该如何迁移?指定以前的版本不起作用(没有更新它说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)

    但它不起来它应该下降!您还可以看到响应中的版本

  2. 如果我必须进行一些数据库更新,是否可以添加一些SQL查询(更改一些与其他数据相关的数据)?我没有尝试过,因为失败不起作用:((

  3. 有没有办法在浏览器中使用migrate命令?我没有控制台访问共享主机,所以我需要这个功能,而不是逐个复制查询:D在phpMyAdmin

php mysql symfony doctrine-orm

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

用LIKE进行Doctrine 2查询

我有这个代码用于查询:

$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)

(查询的最后一部分)请告诉我要改变什么?

sql symfony doctrine-orm

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

学说发现'不等于'

我该怎么办

WHERE id != 1
Run Code Online (Sandbox Code Playgroud)

在学说?

到目前为止我有这个

$this->getDoctrine()->getRepository('MyBundle:Image')->findById(1);
Run Code Online (Sandbox Code Playgroud)

但我怎么做"不等于"?

这可能是愚蠢的,但我找不到任何参考?

谢谢

doctrine-orm

40
推荐指数
5
解决办法
9万
查看次数

FOSUserBundle的多个实体管理器

如果相当容易,在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)

symfony doctrine-orm fosuserbundle

40
推荐指数
1
解决办法
5611
查看次数