【问题标题】:Request in symfony return me some weird datasymfony 中的请求返回一些奇怪的数据
【发布时间】:2021-06-04 11:35:02
【问题描述】:

我想从 bdd 获取数据,就像我一直做的那样,我创建了一个方法来为我的请求添加特定条件,但是在我尝试了很多其他事情之后你会看到。

这里是请求:

    /**
     * @return CongesEchangeRtt[] Returns an array of CongesEchangeRtt objects
     */
    public function findByDate($agents, $date) {
        return $this->createQueryBuilder('c')
            ->andWhere('c.eLogin IN (:val)')
            ->andWhere('c.eDateJour LIKE :date')
            ->setParameter('val', $agents)
            ->setParameter('date', $date . "%")
            ->getQuery()
            ->getResult()
        ;
    }

这个请求必须返回所有符合条件的数据,对吧? 但是我们错了,大声笑,IDK,为什么但这不是它的作用,实际上我在pur SQL中的“phpMyAdmin”中尝试过它并且它起作用了,所以我认为我的问题来自symfony,无论如何这个请求返回给我每个用户(代理)只有一个对象。我得到的数据是正确的,但我没有得到与每个用户匹配的每一个数据......我首先在这里失去了理智,但这只是开始。

在那之后,我尝试了一个简单的“findBy”方法,参数中包含用户数组,我得到了我数组中每个用户的每个日期,但这是为了掩饰,我只想得到那些日期正确的人,我的意思是那些谁在我前面显示的“实际”月份,“实际”是相对的。 所以我用每月的每个日期生成一个数组并尝试了这个:

findBy(["login" => $myUserArray, "dates" => $myArrayOfDates]);

你现在我得到了什么?有什么奇怪的!对! 重复的内容......但是有些不在bdd中,我的意思是,这里是一个例子:

我在这张表中有很多数据/行,如下所示:

login|date(vacation)|presence|absence|comment

所以:

"xxxx.xxxx"|"2021-05-14"|etc
"xxxx.xxxxx"|"2021-05-24"|etc

我在我的 PHP 中得到了这个:

"xxxx.xxxx"|"2021-05-14"|etc
"xxxx.xxxx"|"2021-05-14"|etc

我有正确数量的数据,但它们都一样...

【问题讨论】:

  • 在日期列中使用 LIKE 有点不寻常。通常,您会使用日期特定的 sql 函数,这些函数在理论上可能需要也可能不需要一些自定义。
  • 感谢您的回答,我正在寻找有关您所谈论内容的信息,以找出答案,感谢您的建议,唯一的问题不是我在日期上使用 LIKE ,但最重要的是请求的返回给了我完全异常的数据,我需要解释

标签: sql doctrine-orm doctrine


【解决方案1】:

问题是由我的实体和 bdd 中的表之间的差异引起的。 因为这是一个旧系统的一部分,我知道为什么但是开发人员的代码将两个 PRIMARY KEY 添加到这个表中,当我用 symfony 生成我的实体时,他没有像表一样创建它。他忘记了一个 PRIMARY KEY,也许是因为这是一种特殊情况,通常我读到一个表只需要一个 PRIMARY KEY,无论如何,我通过向我的参数添加正确的注释来修复它,这些注释代表数据库中作为第二个 PRIMARY 的字段KEY,之后问题就解决了。

我改变了这个:

    /**
     * @var \Datetime
     *
     * @ORM\Column(name="e_date_jour", type="date", nullable=false, options={"default"="0000-00-00"})
     */
    private $eDateJour = '0000-00-00';

到这里:


    /**
     * @var string
     *
     * @ORM\Column(name="e_date_jour", type="string", nullable=false, options={"default"="0000-00-00"})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     */
    private $eDateJour = '0000-00-00';

我也更改了 get 和 set 函数,因为 symfony 在生成实体时自己指定了返回的类型,顺便说一句,这是一个好习惯。

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 2023-04-05
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多