我需要获取国家/地区列表,按字母顺序排序.由于我将实体翻译成四种语言(英语,法语,西班牙语和中文),我使用了gedmo学说扩展来管理翻译.问题是当我在实体表单字段类型中获取此列表时:
$form = $builder->add('country', 'entity', 
array('class' => 'GroupCommonBundle:Country',
      'query_builder' => function(EntityRepository $er) {
                  $query = $er->createQueryBuilder('c')->orderBy('c.name');
       }
结果按原始实体定义(英语)而非当前语言环境(西班牙语或法语)排序,我真正需要的是什么.其实我用的$this->container->getParameter('locale')
我试图迫使查询钩,如解释在这里:
$query->getQuery()->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE, $this->container->getParameter('locale'));
但是AFAIK,这只有在查询写成dql时才有效:
    $query = $this->getDoctrine()->getManager()->createQuery('
            SELECT c
            FROM GroupCommonBundle:Country c
            ORDER BY c.name ASC');
    $query->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE, $this->container->getParameter('locale'));
实体表单不允许这样做,因为它正在等待queryBuilder对象.
所以,我需要翻译我的收藏并以他当前的语言排序.谁知道如何实现这一目标?
我想在doctrine中使用union,我搜索了很多但没有得到任何成功,这是我在sql中的union查询,如何在doctrine中转换这个查询?
select * from (select orderid,tutorialId,points,allow_multiple,question,answer1,image1,correct1,answer2,image2,correct2,answer3,image3,correct3,answer4,image4,correct4,answer5,image5,correct5,'1' as istest,'' as content,'' as media,'' as media_type_id from tutorial_test
union
select orderid,tutorialId,'0' as istest,content,media,media_type_id,'' as points,'' as allow_multiple,'' as question,'' as answer1,'' as image1,'' as correct1,'' as answer2,'' as image2,'' as correct2,'' as answer3,'' as image3,'' as correct3,'' as answer4,'' as image4,'' as correct4,'' as answer5,'' as image5,'' as correct5  from tutorial_elements) a where a. tutorialId = 1 order by orderid asc
这一个是我的学说查询
    $query  = "SELECT * FROM(SELECT
                    tt.tutorialid
                FROM
                    TutorialTest tt
                UNION …我有一个实体A,其关系是ManyToOne与B,但A和B不属于同一个DB模式.
实体"A"属于MyBundle包,实体"B"属于MyOtherBundle包.
官方文档说明了如何使用不同的连接:多个模式=多个实体管理器.但就我而言,我想加入两个实体.
通过做 :
$this->objEm->getRepository('MyBundle:MyEntity')->find($id);
要么
$this->objEm->getRepository('MyBundle:MyEntity')->getMyResult($id);
我只调用我的一个存储库,我猜他无法得到另一个,因为在我的config.yml中我只能选择一个连接.
doctrine:
  dbal:
   connections:
     connection1:
       driver:   "%database_driver%"
       host:     "%database_host%"
       port:     "%database_port%"
       dbname:   "%database_name%"
       user:     "%database_schema1_user%"
       password: "%database_schema1_password%"
       service:  "%database_service%"
       charset:  "Windows-1252"
     connection2:
       driver:   "%database_driver%"
       host:     "%database_host%"
       port:     "%database_port%"
       dbname:   "%database_name%"
       user:     "%database_schema2_user%"
       password: "%database_schema2_password%"
       service:  "%database_service%"
       charset:  "Windows-1252"
orm:
  entity_managers:
    em1:
      connection:       connection1
      mappings:
              MyBundle: ~
              MyOtherBundle: ~
    em2:
      connection:       connection2
      mappings:
              MyOtherBundle: ~
结果:糟糕,看起来出了问题.
1/1ReflectionException:类FQCN\Of\MyBundle\Entity\B不存在...
"我知道它不存在,我希望你现在看看好地方:比如在FQCN\Of\MyOtherBundle\Entity\B"
如何强制实体'B'的路径?
我遵循数据库架构 -

现在部门,年份和部门表已经填满了信息.
我现在需要插入学生数据.学生数据将从xls文件导入(导入和解析部分已完成).正如您在架构中看到的那样,表中的列student_data引用year_id,department_di和division_id.因此,在插入时我需要他们的ID字段,因为xls具有各自的名称值.
所以我要根据每个学生的列值来获取相应的ID.因此,这引入了3个查询,用于在学生表中插入一条记录.像这样 -
forloop(...):
     $studentData = new Entities\StudentData();
    $year =  $this->em->getRepository("Entities\Year")->findBy(array('year_name' => $this->year[$i]));
    $department =  $this->em->getRepository("Entities\Department")->findBy(array('department_name' => $this->branch[$i]));
    $division =  $this->em->getRepository("Entities\Division")->findBy(array('division_name'=>$this->division[$i]));
    $studentData->setYear($year[0]);
    $studentData->setDepartment($department[0]);
    $studentData->setDivision($division[0]);
    //other data
    .
    .
    .
    .
    .
    $this->em->persist($studentData);
endforloop();   
$this->em->flush();
$this->em->clear();
正如你所看到的,我将为每个部门,年份和部门获得ID循环.假设我正在导入100个学生列表,因此它最终会运行300个查询来获取这3个ID字段.
我可以在插入数据时直接从他们的名字中获取年份,部门和部门的ID吗?我是学说的新手,我不知道如何去做.
更新 如果问题不清楚,请告诉我.我可以用更多细节更新它或重组它.
我有这样的Doctrine fetch语句
$query = "SELECT id FROM table LIMIT 2";
$result = $db->fetchAll($query);
它返回这样的数组:
Array
(
[0] => Array
    (
        [id] => 1
    )
[1] => Array
    (
        [id] => 2
    )
)
由于我获取的唯一列是ID,我不需要数组范围那么深.是否有一种方便的方法使Doctrine将结果返回到"平面"数组中,类似于PDO的作用:
$result = $db->query($query)->fetchAll(PDO::FETCH_COLUMN);
将返回
Array
(
    [0] => 1
    [1] => 2
)
目前我正在使用它
$result = call_user_func_array('array_merge', array_map("array_values", $result));
我目前正在使用SF2中的服务,该服务使用在本服务的构造函数中使用特定于存储库的QueryBuilder的类变量集来使用QueryBuilder查询数据库.这意味着我想尽可能地使用这个集合QueryBuilder来获得更整洁的代码和使用它的干净感觉.
我想避免在EntityManager上创建查询,而是仅使用此预定义的Querybuilder进行查询.
我正在寻找看起来像以下那样的东西:
$query = $this->fooRepository->createQueryBuilder('f')->select('*');
return $query->getResult(Query::HYDRATE_ARRAY);
据我所知,以上将(如果它工作)返回数据库中的所有foo ..
如果您认为我是愚蠢的,应该对预定义的QueryBuilders做一些不同的事情,或者只使用:
createQuery()
方法,因为它根本不是好的做法或不可能,不要犹豫告诉我.
谢谢!
创建通用关联,其中第一个实体(例如,类别)可以多次用于其他对象(例如,帖子,文章)
例
帖子有类别,文章有类别,但文章和帖子是完全不同的实体.(两者不能同时连接)
岗位
<?php
/** @Entity */
class Post
{
    // ...
    /**
     * @ManyToMany(targetEntity="Category")
     * @JoinTable(name="post_categories",
     *      joinColumns={@JoinColumn(name="post_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id", unique=true)}
     *      )
     */
    private $categories;
    public function __construct()
    {
        $this->categories= new \Doctrine\Common\Collections\ArrayCollection();
    }
    // ...
}
文章
<?php
/** @Entity */
class Article
{
    // ...
    /**
     * @ManyToMany(targetEntity="Category")
     * @JoinTable(name="article_categories",
     *      joinColumns={@JoinColumn(name="article_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id", unique=true)}
     *      )
     */
    private $categories;
    public function __construct()
    {
        $this->categories= new …我想知道是否可以为列名添加空格,例如
$query = "SELECT u.firstName AS 'First Name' FROM User u";
$result = $query->getResult( Query::HYDRATE_ARRAY );
我希望获取一个不存在反向关联的实体(在1:1关联上)
我收到错误:
DQL查询中不支持反向的单值关联路径表达式.请改用显式连接.
查询:
$query = $this->getEntityManager()->createQuery("
                SELECT DISTINCT(p.date)
                FROM MainBundle:Price p
                WHERE p.emaPrice IS NULL
                ORDER BY p.date ASC
            ")
            ->setMaxResults(1);
        $date = $query->getOneOrNullResult();
我理解错误,但我真的不肯修复它.我已经读过我应该添加一个明确的JOIN,但我已经添加了它,但仍然没有运气.
带连接的EDIT查询:
$query = $this->getEntityManager()->createQuery("
        SELECT DISTINCT(p.date)
        FROM MainBundle:Price p
        JOIN MomentumBundle:EmaPrice ep
        WITH ep.id = p.emaPrice
        WHERE p.emaPrice IS NULL
        ORDER BY p.date ASC
    ")
    ->setMaxResults(1);
$date = $query->getOneOrNullResult();
我正在尝试使用 Doctrine 中的删除查询仅删除 x 个对象。并且由于学说中没有 LIMIT,我们应该使用 $query->setMaxResults($limit) 来代替。我正在使用 Symfony2。
但是,它不适用于以下查询(无论是否使用 $query->setMaxResults($limit),它都会删除所有内容而不是删除 $limit 第一个实体)。
$limit = 10;
$query = $entityManager->createQuery(
        'DELETE FROM MyProject\Bundle\MyBundle\Entity\MyEntity myEntity
         WHERE myEntity.cost = 50'
    )
$query->setMaxResults($limit);
$query->execute();
doctrine-query ×10
doctrine-orm ×9
symfony ×6
mysql ×5
php ×5
doctrine ×3
dql ×2
codeigniter ×1
orm ×1
pdo ×1