标签: doctrine-orm

Doctrine2和MySQL分区

有没有人有使用分区功能和Doctrine2库的经验?

第一个问题是Doctrine为关联列创建了外键,有人知道如何阻止或禁用它吗?

第二个问题是如何指定自定义表定义(PARTITION BY ...)?

提前致谢!

php mysql partitioning doctrine-orm

21
推荐指数
2
解决办法
3982
查看次数

在Doctrine 2中,可以在运行时更改获取模式(Eager/Lazy等)吗?

我有我想要加载的实体,以及其他ocassions懒惰(甚至是额外的懒惰)加载.

我的映射没有在我的YAML中声明的获取模式 - 因此它们使用默认值(延迟加载).

目前,热切加载的唯一方法是手动构建DQL - 每次添加新实体时我都需要更新它.

理想情况下,我只是加载根实体和强制加载所有关联对象的力.有什么方法可以做到这一点吗?

如果不是为什么(是否有一个原因超出它是一个未实现的功能)?

orm doctrine datamapper entitymanager doctrine-orm

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

如何在Symfony 2中为数据库视图设置实体(doctrine)

让我们说我有一个视图表.我希望从中获取数据到实体.我可以(以及如何)创建实体类来做到这一点.(不需要保存操作).我只想展示它们.

php mysql symfony doctrine-orm

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

Symfony2:spl_object_hash()期望参数1是对象,在Doctrine中给出的字符串

我试图通过执行使用对象User和Person填充数据库

坚持和冲洗.

首先,我正在创建Person对象并持久化并刷新它:

$person->setFirstname($enquiry->getFirstname());
$person->setLastname($enquiry->getLastname());
$person->setLastname($enquiry->getLastname());
$person->setSex($enquiry->getSex());
$person->setEmail($enquiry->getEmail());
$person->setAddress1($enquiry->getAddress1());
$person->setAddress2($enquiry->getAddress2());
$person->setCity($enquiry->getCity());
$person->setZipcode($enquiry->getZipcode());
$country = $em->getRepository('SciForumVersion2Bundle:Country')->findOneById($enquiry->getCountry());  
$person->setCountry($country);

$em->persist($person);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

然后是我的User对象:

$user->setEmail($enquiry->getEmail());
$user->setPassword($enquiry->getPassword());
$user->setPersonId($person->getId());
$user->setDegree($enquiry->getDegree());
$user->setSex($enquiry->getSex());
$user->setOrganization($enquiry->getOrganization());
$user->setTelephone($enquiry->getTelephone());
$user->setFax($enquiry->getFax());
$user->setWorkplace($enquiry->getWorkplace());  
$user->setJobtype($enquiry->getJobtype());
$user->setResearchField($enquiry->getResearchField());
$user->setManageConference(0);
$user->setIp( $IP);
$user->setStatus( 0 );
$user->setDateRegistered( time() );

$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

但是当尝试flush()用户对象的持久性时,我收到错误:

Warning: spl_object_hash() expects parameter 1 to be object, string given in /home/milos/workspace/conference2.0/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php line 1095 
Run Code Online (Sandbox Code Playgroud)

以下是entier的日志:

Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
Notified event "kernel.request" to listener …
Run Code Online (Sandbox Code Playgroud)

database entity symfony doctrine-orm

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

Doctrine2 ORM不会保存对DateTime字段的更改

我有一个用户实体:

use Doctrine\ORM\Mapping as ORM;

/**
 * ExampleBundle\Entity\User
 *
 * @ORM\Entity()
 */
class User
{
    // ...

    /**
     * @ORM\Column(type="service_expires_at", type="date", nullable=true)
     */
    private $service_expires_at;

    public function getServiceExpiresAt()
    {
        return $this->service_expires_at;
    }

    public function setServiceExpiresAt(\DateTime $service_expires_at)
    {
        $this->service_expires_at = $service_expires_at;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将用户更新service_expires_at为以下内容时,更新后的service_expires_at不会保存回数据库:

$date = $user->getServiceExpiresAt(); 

var_dump($date->format('Y-m-d')); // 2013-03-08

$date->modify('+10 days');

var_dump($date->format('Y-m-d')); // 2013-03-18

$user->setServiceExpiresAt($date);

$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

但是,如果我传递一个新DateTime对象service_expires_at,则更新的值将正确保存:

$date = $user->getServiceExpiresAt(); 

$date->modify('+10 days');

$user->setServiceExpiresAt(new \DateTime($date->format('Y-m-d'));

$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

oop encapsulation doctrine-orm

21
推荐指数
1
解决办法
6673
查看次数

Doctrine 2 WHERE IN子句使用实体集合

我正在尝试在Doctrine 2中构建一个查询,该查询查找Vacancy与任何给定VacancyWorkingHours实体相关的所有实体.

Vacancy实体看起来如下:

/**
 * Vacancy
 *
 * @ORM\Table(name="vacancy")
 * @ORM\Entity(repositoryClass="JaikDean\CareersBundle\Entity\VacancyRepository")
 */
class Vacancy
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var VacancyWorkingHours
     *
     * @ORM\ManyToOne(targetEntity="VacancyWorkingHours", inversedBy="vacancies")
     * @ORM\JoinColumn(name="vacancy_working_hours_id", referencedColumnName="id")
     **/
    private $workingHours;

    /* Other fields and methods are inconsequential */
}
Run Code Online (Sandbox Code Playgroud)

我的查询当前看起来如下,但由于where子句没有返回结果.在此示例中,$workingHoursDoctrine\Common\Collections\ArrayCollection包含许多VacancyWorkingHours实体的实例

$q = $this->createQueryBuilder('v')
    ->select('v')
    ->andWhere('v.workingHours IN (:workingHours)')
    ->setParameter('workingHours', $workingHours->toArray());
;
Run Code Online (Sandbox Code Playgroud)

php orm doctrine symfony doctrine-orm

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

学说:用条件计算实体的项目

如何用Doctrine中的条件计算实体的项目?例如,我意识到我可以使用:

$usersCount = $dm->getRepository('User')->count();
Run Code Online (Sandbox Code Playgroud)

但这只会计算所有用户.我想只计算那些有类型员工的人.我可以这样做:

$users = $dm->getRepository('User')->findBy(array('type' => 'employee'));
$users = count($users);
Run Code Online (Sandbox Code Playgroud)

这可行,但它不是最佳的.有类似以下内容:?

$usersCount = $dm->getRepository('User')->count()->where('type', 'employee');
Run Code Online (Sandbox Code Playgroud)

php doctrine doctrine-orm

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

在迁移文件中使用EntityManager

我有这个代码,但不起作用:

<?php

namespace Application\Migrations;

use Doctrine\DBAL\Migrations\AbstractMigration,
    Doctrine\DBAL\Schema\Schema;

/**
 * Auto-generated Migration: Please modify to your need!
 */
class Version20131021150555 extends AbstractMigration
{

    public function up(Schema $schema)
    {
        // this up() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql", "Migration can only be executed safely on 'mysql'.");

        $this->addSql("ALTER TABLE person ADD tellphone LONGTEXT DEFAULT NULL");

        $em = $em = $this->getDoctrine()->getEntityManager();
        $persons = $em->getRepository('AutogestionBundle:Person')->fetchAll();

        foreach($persons as $person){
            $person->setTellPhone($person->getCellPhone());
            $em->persist($person);                                                                            
        }
        $em->flush(); 
    }

    public function down(Schema $schema)
    {
        // …
Run Code Online (Sandbox Code Playgroud)

migration symfony doctrine-orm

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

主义2 - 获取所有记录

有没有人知道有一种快速方法可以使用Doctrine在表中获取所有记录而不使用DQL.

我是否错过了某些内容,或者您​​是否需要在课堂上编写公共函数?

orm doctrine-orm

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

学说2:如何使用子查询列(在SELECT子句中)

我正在尝试使用SELECT子句中的子查询执行简单的选择查询,并且根本没有找到方法来执行此操作.我已尝试使用DQL和QueryBuilder,但都不起作用.代码如下,请不要说我只能使用连接,这是一个简单的例子,只是为了说明问题,我有合理的子查询用例.

// With QueryBuilder
$query = $qb->select(array('a', 
                           '(SELECT at.addresstypeName 
                               FROM e:Addresstype at 
                              WHERE at.addresstypeId = a.addresstypeId
                            ) AS addresstypeName'))
            ->from('e:Address', 'a')
            ->where('a.addressId = :addressId')
            ->setParameter('addressId', 1);

// With DQL
$dql = "SELECT a, 
               (SELECT at.addresstypeName 
                  FROM e:Addresstype at 
                 WHERE at.addresstypeId = a.addresstypeId
               ) AS addresstypeName 
          FROM e:Address a 
         WHERE a.addressId = :addressId";
$query = $em->createQuery($dql)->setParameter(':addressId', 1);
Run Code Online (Sandbox Code Playgroud)

地址表中定义了以下关系:

/**
 * @ORM\ManyToOne(targetEntity="Addresstype")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="addresstype_id", referencedColumnName="addresstype_id")
 * })
 */
protected $addresstype;
Run Code Online (Sandbox Code Playgroud)

在本机SQL中,查询将如下所示:

SELECT
    a.*,
    (
        SELECT at.addresstype_name
        FROM addresstype at
        WHERE …
Run Code Online (Sandbox Code Playgroud)

doctrine-orm

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