标签: doctrine-orm

在Doctrine2查询中使用限制和偏移

我正在尝试进行分页,但是有一个错误:

[语法错误]第0行,第57行:错误:字符串的预期结束,得到'限制'

我不太确定这是否是正确的语法(和逻辑)来进行查询:

public function getFriendsFromTo ($user, $limit, $offset)
{
     return $this->getEntityManager()
        ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.user='.$user.' limit '.$limit. 'offset' .$offset)
        ->getResult();
}
Run Code Online (Sandbox Code Playgroud)

朋友和用户是相关的很多ToOne和oneToMany,所以在friends表中有一个字段 - user_id.

这是在我的控制器中:

$user = $this->get('security.context')->getToken()->getUser();
$id = $user->getId();

$friends = $user->getFriends();
$result = count($friends)
$FR_PER_PAGE = 7;
$pages = $result/$FR_PER_PAGE;

$em = $this->getDoctrine()->getEntityManager();
$friends = $em->getRepository('EMMyFriendsBundle:Friend')
         ->getFriendsFromTo($id, $FR_PER_PAGE, $page*$FR_PER_PAGE); 
Run Code Online (Sandbox Code Playgroud)

我知道它是愚蠢甚至错误的(特别是第三个参数$page*$FR_PER_PAGE),但我只想尝试查询是否有效,但事实并非如此.

pagination symfony doctrine-orm

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

Nelmio Api Doc中的组排除不起作用更新作曲家后

我将参数设置为数组,如http://jmsyst.com/libs/serializer/master/reference/annotations中所述

class QuestionAnswer
{
    /**
   * @JMS\Type("ArrayCollection<Rest\Bundle\Entity\Fixture\QuestionOptions>")
     * @Groups({"QuestionAnswer"})
   */
      public $question_options_array ;
}
Run Code Online (Sandbox Code Playgroud)

并在另一个类中定义一些选项

class QuestionOptions
{
    /**
       * @JMS\Type("integer")
       * @Groups({"get_option"})
       */
      public $question_option_id ;

      /**
       * @JMS\Type("string")
       * @Groups({"post_option"})
       */
      public $question_option_description;
}
Run Code Online (Sandbox Code Playgroud)

在@ApiDoc我定义

     * input={
     *      "class" = "Rest\BeautyBundle\Entity\Fixture\ProfileQuestionAnswer", 
     *      "groups"={"QuestionAnswer", "get_option"},
     *  },
Run Code Online (Sandbox Code Playgroud)

在更新之前它运作良好.但composer update只有"QuestionAnswer"组名称起作用后才能显示QuestionOptions类的所有属性.如何以更新前的方式提交数组中的属性?

php symfony doctrine-orm nelmioapidocbundle

54
推荐指数
1
解决办法
1472
查看次数

Doctrine2存储库是保存实体的好地方吗?

当我阅读有关存储库的文档时,通常使用实体和集合,但是以"只读"的方式.

从来没有存储库具有类似insertUser(User $user)或的方法的示例updateUser(User $user).

但是,在使用SOA时,Service不应该使用Entity Manager(这是对的,不是吗?)所以:

  1. 我的服务应该知道全局EntityManager吗?
  2. 我的服务应该只知道使用过的存储库(比方说,UserRepository和ArticleRepository)

从这两个问题,另一个问题,我的服务应该明确persist()flush()我的实体吗?

soa design-patterns service-layer symfony doctrine-orm

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

怎么办左派加入学说?

这是我的功能,我试图显示用户历史记录.为此,我需要显示用户的当前信用以及他的信用记录.

这就是我想要做的:

 public function getHistory($users) {
    $qb = $this->entityManager->createQueryBuilder();
    $qb->select(array('a','u'))
            ->from('Credit\Entity\UserCreditHistory', 'a')
            ->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')
            ->where("a.user = $users ")
            ->orderBy('a.created_at', 'DESC');

    $query = $qb->getQuery();
    $results = $query->getResult();

    return $results;
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

[语法错误]第0行,第98行:错误:预期的Doctrine\ORM\Query\Lexer :: T_WITH,"开启"

编辑:我在join子句中用'WITH'替换'ON',现在我看到的只是加入列中的1个值.

php doctrine-orm zend-framework2

53
推荐指数
1
解决办法
11万
查看次数

在学说中fetch ="EAGER"和fetch ="LAZY"之间有什么区别?

Doctrine中fetch="EAGER"fetch="LAZY"注释之间有什么区别@ManyToOne

/**
 * @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="EAGER")
 */

/**
 * @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="LAZY")
 */
Run Code Online (Sandbox Code Playgroud)

orm many-to-many doctrine-orm

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

Doctrine 2 - 禁止ManyToOne关系的外键上的空值

我在我的一个实体中有一个ManyToOne关系,如下所示:

class License {
    // ...
    /**
     * Customer who owns the license
     * 
     * @var \ISE\LicenseManagerBundle\Entity\Customer
     * @ORM\ManyToOne(targetEntity="Customer", inversedBy="licenses")
     * @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
     */
    private $customer;
    // ...
}

class Customer {
    // ...
    /**
     * Licenses that were at one point generated for the customer
     * 
     * @var \Doctrine\Common\Collections\ArrayCollection
     * @ORM\OneToMany(targetEntity="License", mappedBy="customer")
     */
    private $licenses;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这将生成一个数据库模式,其中允许许可证表的"customer_id"字段为空,这正是我不想要的.

这里是一些代码,我创建一个记录来证明它确实允许引用字段的空值:

$em = $this->get('doctrine')->getEntityManager();
$license = new License();
// Set some fields - not the reference fields though
$license->setValidUntil(new \DateTime("2012-12-31")); …
Run Code Online (Sandbox Code Playgroud)

php relationship many-to-one doctrine-orm

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

用学说2设置LIMIT?

我试图写一个查询(带子查询),但我不知道如何在我的子查询中设置限制.我的查询:

$query_ids = $this->getEntityManager()
      ->createQuery(
        "SELECT e_.id
        FROM MuzichCoreBundle:Element e_
        WHERE [...]
        GROUP BY e_.id")
     ->setMaxResults(5)
    ;

$query_select = "SELECT e
      FROM MuzichCoreBundle:Element e 
      WHERE e.id IN (".$query_ids->getDql().")
      ORDER BY e.created DESC, e.name DESC"
    ;

$query = $this->getEntityManager()
      ->createQuery($query_select)
      ->setParameters($params)
    ;
Run Code Online (Sandbox Code Playgroud)

但是- > setMaxResults(5)不起作用.SQL查询中没有'LIMIT'.我们可以用学说2做简单的限制吗?

doctrine-orm

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

如何限制学说2中结果集的大小?

如果我正在使用respository类的findBy方法,我如何限制结果集的大小?

php orm doctrine-orm

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

Symfony登录用户的id

我正在使用Symfony2和doctrine 2开发一个应用程序.我想知道如何获得当前登录用户的ID.

dql symfony doctrine-orm

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

在学说2中的日期之间选择条目

我会因为这个我没有得到解决的最小错误而疯狂.我想在两天之间选择条目,下面的例子说明了我所有的失败:

选择1.

$qb->where('e.fecha > ' . $monday->format('Y-m-d'));
$qb->andWhere('e.fecha < ' . $sunday->format('Y-m-d'));
Run Code Online (Sandbox Code Playgroud)

结果(0个条目):

SELECT r0_.id_reservacion AS id_reservacion0, r0_.fecha AS fecha1, r0_.cliente AS cliente2 
FROM reservacion r0_ 
WHERE (r0_.fecha > 2012 - 07 - 16) AND (r0_.fecha < 2012 - 07 - 22)
Run Code Online (Sandbox Code Playgroud)

选择2

$qb->add('where', 'e.fecha between 2012-01-01 and 2012-10-10');
Run Code Online (Sandbox Code Playgroud)

结果(0个条目):

SELECT r0_.id_reservacion AS id_reservacion0, r0_.fecha AS fecha1, r0_.cliente AS cliente2 
FROM reservacion r0_ WHERE r0_.fecha 
BETWEEN 2012 - 01 - 01 AND 2012 - 10 - 10
Run Code Online (Sandbox Code Playgroud)

这是我当前条目的表格:

id      fecha …
Run Code Online (Sandbox Code Playgroud)

php date between query-builder doctrine-orm

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