有没有人有使用分区功能和Doctrine2库的经验?
第一个问题是Doctrine为关联列创建了外键,有人知道如何阻止或禁用它吗?
第二个问题是如何指定自定义表定义(PARTITION BY ...)?
提前致谢!
我有我想要加载的实体,以及其他ocassions懒惰(甚至是额外的懒惰)加载.
我的映射没有在我的YAML中声明的获取模式 - 因此它们使用默认值(延迟加载).
目前,热切加载的唯一方法是手动构建DQL - 每次添加新实体时我都需要更新它.
理想情况下,我只是加载根实体和强制加载所有关联对象的力.有什么方法可以做到这一点吗?
如果不是为什么(是否有一个原因超出它是一个未实现的功能)?
让我们说我有一个视图表.我希望从中获取数据到实体.我可以(以及如何)创建实体类来做到这一点.(不需要保存操作).我只想展示它们.
我试图通过执行使用对象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) 我有一个用户实体:
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)
为什么会这样?
我正在尝试在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子句没有返回结果.在此示例中,$workingHours是Doctrine\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) 如何用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
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) 有没有人知道有一种快速方法可以使用Doctrine在表中获取所有记录而不使用DQL.
我是否错过了某些内容,或者您是否需要在课堂上编写公共函数?
我正在尝试使用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 ×10
php ×4
symfony ×4
doctrine ×3
orm ×3
mysql ×2
database ×1
datamapper ×1
entity ×1
migration ×1
oop ×1
partitioning ×1