首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DQL错误理论2

DQL错误理论2
EN

Stack Overflow用户
提问于 2015-01-13 04:52:09
回答 1查看 888关注 0票数 0

我有一个简单的控制器:

代码语言:javascript
复制
<?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');

        }
    }
}

在(*)线上,它工作得很好。但是在(**)行中,我得到了下面的错误。

(!)致命错误:在C:\wamp\www\ControleReceitas_DoctrineORM\application\libraries\Doctrine\DBAL\Driver\AbstractMySQLDriver.php第71行的“字段列表”中有消息'SQLSTATE42S22:列未找到: 1054个未知列'r0_.slug_categoria‘的未识别异常’r0_.slug_categoria‘。 C:\wamp\www\ControleReceitas_DoctrineORM\application\libraries\Doctrine\DBAL\Driver\PDOConnection.php中的PDOException: SQLSTATE42S22:列未找到: 1054行中的“字段列表”中的“r0_.slug_categoria”列

这是一个简单的查询。我想从上面的查询中得到4条记录,但是我得到了这个错误。我真的不知道是怎么回事。它是关于r0_.slug_categoria字段的警告,但该字段位于另一个表中。

我的意图是得到4个随机不同的记录在每页加载。我知道我在这里的疑问不是这样的。但我不能做这个简单的工作.所以,首先,我需要了解出了什么问题才能前进.

下面是我的桌子结构。

代码语言:javascript
复制
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 ;

我做错什么了?

谢谢,马塞洛。

EN

回答 1

Stack Overflow用户

发布于 2015-01-13 05:10:04

我发现了我的问题..。该错误是由于我在实体和映射文件中出错而引发的。

下面是我的映射文件:

代码语言:javascript
复制
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。

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

代码语言:javascript
复制
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“。

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

顺便说一下..。我现在真的知道,当我做“复制和粘贴”时,我需要更多的注意!)

诚挚的问候。马塞洛。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27915091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档