【问题标题】:DQL Error with doctrine 2教义 2 的 DQL 错误
【发布时间】:2015-03-10 23:49:32
【问题描述】:

我有这个简单的控制器:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        if (!is_null($this->doctrine->em))
        {
            $em = $this->doctrine->em;

            $categorias = $em->getRepository('Entities\Categoria')->findBy([], ['categoria' => 'ASC']); (*)
            $data['categorias'] = $categorias;

            $dql = "SELECT r FROM Entities\Receita r"; 
            $query = $em->createQuery($dql); 
            $query->setMaxResults(4);
            $receitas = $query->getResult(); (**)

            $data2['chamadas'] = $receitas;

            //Defino aqui o indice do menu que ficará ativo
            $this->session->set_userdata('menu_active', 0);

            $this->load->view('html_header'); 
            $this->load->view('menu_categorias', $data);
            $this->load->view('conteudo', $data2);
            $this->load->view('html_footer');

        }
    }
}

在 (*) 行中,它工作正常。但在 (**) 行,我收到以下错误。

( ! ) 致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE [42S22]:未找到列:1054 未知列 '字段列表'中的'r0_.slug_categoria' C:\wamp\www\ControleReceitas_DoctrineORM\application\libraries\Doctrine\DBAL\Driver\AbstractMySQLDriver.php 在第 71 行

PDOException:SQLSTATE[42S22]:未找到列:1054 未知列 '字段列表'中的'r0_.slug_categoria' C:\wamp\www\ControleReceitas_DoctrineORM\application\libraries\Doctrine\DBAL\Driver\PDOConnection.php 在第 104 行

这是一个简单的查询。我想从上面的查询中获取 4 条记录,但我收到了这个错误。我真的不知道出了什么问题。它是关于 r0_.slug_categoria 字段的警告,但该字段在另一个表中。

我的目的是在每次页面加载时随机获取 4 条不同的记录。我知道我在这里的查询不是这样。但我不能做这个简单的工作......所以,首先,我需要了解出了什么问题才能继续前进......

下面是我的表格结构。

CREATE TABLE IF NOT EXISTS `categorias` (
  `id_categoria` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `categoria` varchar(45) NOT NULL,
  `slug_categoria` varchar(255) NOT NULL,
  PRIMARY KEY (`id_categoria`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;

CREATE TABLE IF NOT EXISTS `receitas` (
  `id_receita` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `receita` varchar(255) NOT NULL,
  `slug_receita` varchar(255) NOT NULL,
  `texto` text NOT NULL,
  `categoria` int(10) unsigned NOT NULL,
  `foto` varchar(45) DEFAULT NULL,
  `adicionada_quando` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_receita`),
  KEY `FK_receita_categoria` (`categoria`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

我做错了什么?

谢谢, 马塞洛。

【问题讨论】:

    标签: php doctrine-orm


    【解决方案1】:

    我发现了我的问题....错误被触发是因为我在实体和映射文件中犯了一个错误。

    下面是我的映射文件:

    Entities\Receita:
      type: entity
      table: receitas
      fields:
        idReceita:
          type: integer
          id: true
          generator:
            strategy: IDENTITY
          column: id_receita
        receita:
          type: string
          length: 45
          nullable: false
        slugReceita:
          type: string
          length: 255
          nullable: false
          column: slug_receita (*)
        texto:
          type: text
          nullable: false
        foto:
          type: string
          length: 45
          nullable: true
        adicionadaQuando:
          type: datetimetz
          columnDefinition: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
          nullable: false
          column: adicionada_quando
      manyToOne:
          categoria:
            targetEntity: Categoria
            joinColumn:
              name: categoria
              referencedColumnName: id_categoria
    

    错误在 (*) 行,它是 slug_categoria,正确的是 slug_receita。

    第二个错误,在我的实体中发现:

    class Receita
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id_receita", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $idReceita;
    
        /**
         * @var string
         *
         * @ORM\Column(name="receita", type="string", length=45, nullable=false)
         */
        private $receita;
    
        /**
         * @var string
         *
         * @ORM\Column(name="slug_receita", type="string", length=255, nullable=false) (*)
         */
        private $slugReceita;
    

    在 (*) 行中,是 name="slug_categoria",正确的是 name="slug_receita"。

    我犯了一个映射错误,教义实体生成器将映射错误复制到实体。

    顺便说一句...我现在真的知道了,我在做“复制和粘贴”时需要多加注意!!! :)

    最好的问候。 马塞洛。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多