【问题标题】:symfony2 "find" is not finding all results in dbsymfony2 \"find\" 未在 db 中找到所有结果
【发布时间】:2022-08-19 02:34:36
【问题描述】:

在我目前正在从事的一个项目中,没有在数据库中找到零件号 它使用 symfony 2.7 和学说。我试过 find、findBy、findOneBy 和 findAll 仍然没有一个能够在数据库中找到正确的零件号。

这应该搜索数据库并找到类似的零件编号并将其显示在页面上。办理流程如下。

1.用户通过使用Excel文件复制和粘贴来上传发票 Site form

  1. 然后抓取信息并将项目放入数组中。

     if ($import) {
         $importData = $form->get(\'importData\')->getData();
         /* @var $invoice OnWaterInvoice */
         $pattern = \'/\"(.+)\\r\\n?(.+)\"/\';
         $replace = \'$1$2\';
         $importData = preg_replace($pattern, $replace, $importData);
         $importData = explode(\"\\r\\n\", $importData);
         foreach ($importData as $item) {
             $item = trim($item);
             $item = explode(\"\\t\", $item);
             foreach ($item as $key => $value) {
                 $value = trim($value);
                 if ($key == 0 || $key == 4) {
                     $value = (int) $value;
                 }
                 if ($key == 5 || $key == 6) {
                     $value = (float) $value;
                 }
                 $item[$key] = $value;
             }
    
  2. 这就是我遇到的问题是这行代码就在这里

    $pn = $this->getDoctrine()->getRepository(\'EICStockBundle:PartNumber\')->find($item[2]); $invoiceItem->setPartNumber($pn);

即使零件号在数据库中,这也不会获取零件号。好像值没有更新。因为如果添加一个新数字,我会得到相同的结果。它跳过它。 零件号是表的 id 但是当我使用 ->findBy(\'id\'=>$item[2]) 我收到一个错误。

这应该找到零件以及可能的零件,因为有时使用了不正确的零件编号。如果我能得到一些关于我做错了什么的指示,我将不胜感激。

谢谢

更新 - -

我试过清除学说缓存 使用

doctrine:cache:clear-collection-region doctrine:cache:clear-entity-region doctrine:cache:clear-metadata

我也尝试过架构:重建和更新,但仍然没有提取正确的 id

  • 你试过->findBy([\'id\' => $item[2]]) - 因为findby 需要一个数组,而你在那里发布的不是一个。

标签: php symfony doctrine symfony-2.7


【解决方案1】:
if ($key == 5 || $key == 6) {
    $value = (float) $value;
}

您试图通过 ID 查找数据库条目,在本例中为浮点数,在其他情况下为整数。我认为(并强烈建议)您的 ID 不是浮点数而是整数。所以这可能是潜在的问题——无论是对于教义还是对于 MySQL。

如果您使用以下内容,您会遇到什么错误?

->findBy(['id' => $item[2]])

另一个潜在的问题可能是以下行。在这里,您将覆盖循环数组:

foreach ($item as $key => $value) {
  //....
  $item[$key] = $value;

这是故意的吗?

在执行find() 方法之前,您是否执行过var_dump($item) 以查看值是否正确?

PS:您是否出于特定原因使用 Symfony 2.7? Symfony 5.4 现在是 LTS,所以我们现在领先 3 个主要版本。

【讨论】:

  • 这个项目是从我的经理那里继承的,他不再在我的工作中工作,我刚刚开始学习:/ php。所以我从来不知道 var_dumb() 所以我不知道如何正确地解决这些问题,除了故意破坏它以找出它在做什么。我什至无法访问开发服务器。尝试在 find() 之前添加 var_dump($item) 并且它只是中断。我在屏幕上收到错误 500。无论如何将其添加到文件中?
  • 此外,对 symfony 的更新可能会完全破坏当前站点
猜你喜欢
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多