【问题标题】:Getting issues while trying to generate Doctrine2 CRUD尝试生成 Doctrine2 CRUD 时遇到问题
【发布时间】:2015-03-09 13:15:38
【问题描述】:

我试图通过运行任务php app/console doctrine:generate:crud 来生成一个简单的 Doctrine2 CRUD,但在它结束之前我收到了这个错误:

[Doctrine\ORM\Mapping\MappingException] 目标实体 ProductBundle\Entity\KList 在中找不到 'ProductBundle\Entity\ListHasProduct#list'。

如果在我的实体中我与该实体没有关系,它为什么要寻找那个?这是我的实体代码:

<?php

namespace Wuelto\BankRulesBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * @ORM\Table(name="bank_rules")
 * @ORM\Entity
 * @Gedmo\SoftDeleteable(fieldName="deletedAt")
 */
class BankRules {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * 
     * @ORM\ManyToOne(targetEntity="BankBundle\Entity\NBank" )      
     * @ORM\JoinColumn(name="n_bank", referencedColumnName="id")   
     */
    protected $n_bank;

    /**
     * @ORM\Column(type="string", length=255)      
     */
    protected $regex;

    /**
     * @ORM\Column(type="text")      
     */
    protected $action;

    /**
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(name="created", type="datetime")
     */
    protected $created;

    /**
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(name="modified", type="datetime")
     */
    protected $modified;

    /**
     * @ORM\Column(name="deletedAt", type="datetime", nullable=true)
     */
    protected $deletedAt;

    public function getId() {
        return $this->id;
    }

    public function setRegex($regex) {
        $this->regex = $regex;
        return true;
    }

    public function getRegex() {
        return $this->regex;
    }

    public function setAction($action) {
        $this->action = $action;
    }

    public function getAction() {
        return $this->action;
    }

    public function setCreated($created) {
        $this->created = $created;
    }

    public function getCreated() {
        return $this->created;
    }

    public function setModified($modified) {
        $this->modified = $modified;
    }

    public function getModified() {
        return $this->modified;
    }

    public function getDeletedAt() {
        return $this->deletedAt;
    }

    public function setDeletedAt($deletedAt) {
        $this->deletedAt = $deletedAt;
    }

}

我该如何解决这个问题?

更新 1

我通过在ListHastProduct 实体处修复此错误来修复第一个错误:

/**
   * @ORM\ManyToOne(targetEntity="UserBundle\Entity\KList", inversedBy="products" )
   * @ORM\JoinColumns(@ORM\JoinColumn(name="kuser", referencedColumnName="kuser"),
   *                  @ORM\JoinColumn(name="klist", referencedColumnName="name"))   
   */
  protected $list;

但现在我得到了另一个错误:

[Doctrine\ORM\Mapping\MappingException] 单个 id 不允许在 实体 ShoppingBundle\Entity\BillDetail 中的复合主键

这是我的BillDetail 定义:

<?php

namespace ShoppingBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * @ORM\Entity
 * @ORM\Table(name="bill_detail")
 */
class BillDetail {

    /**
     * @ORM\Id
     * @ORM\Column(type="int",length=11)
     * @ORM\GeneratedValue
     */
    protected $id;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="ShoppingBundle\Entity\Transaction")
     * @ORM\JoinColumn(name="ktransaction", referencedColumnName="id")
     */
    protected $transaction;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="UserBundle\Entity\User")
     * @ORM\JoinColumn(name="kuser", referencedColumnName="id")
     */
    protected $user;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="CatalogBundle\Entity\KCatalog")
     * @ORM\JoinColumn(name="kcatalog", referencedColumnName="id")
     */
    protected $catalog;

    /**
     * @ORM\Column(type="decimal")
     */
    protected $amount;

    /**
     * @ORM\Column(type="integer")
     */
    protected $status;

    /**
     * @ORM\Column(name="created", type="datetime")
     * @Gedmo\Timestampable(on="create")
     */
    protected $created;

    /**
     * @ORM\Column(name="modified", type="datetime")
     * @Gedmo\Timestampable(on="update")
     */
    protected $modified;

    public function getId() {
        return $this->id;
    }

    public function setUser(\UserBundle\Entity\User $user) {
        $this->user = $user;
    }

    public function getUser() {
        return $this->user;
    }

    public function setCatalog(\CatalogBundle\Entity\KCatalog $catalog) {
        $this->catalog = $catalog;
    }

    public function getCatalog() {
        return $this->catalog;
    }

    public function setTransaction(\ShoppingBundle\Entity\Transaction $transaction) {
        $this->transaction = $transaction;
    }

    public function getTransaction() {
        return $this->transaction;
    }

    public function setAmount($amount) {
        $this->amount = $amount;
    }

    public function getAmount() {
        return $this->amount;
    }

    public function setStatus($status) {
        $this->status = $status;
    }

    public function getStatus() {
        return $this->status;
    }

    public function setCreated($created) {
        $this->created = $created;
    }

    public function getCreated() {
        return $this->created;
    }

    public function setModified($modified) {
        $this->modified = $modified;
    }

    public function getModified() {
        return $this->modified;
    }

}

【问题讨论】:

  • 我们能有ProductBundle\Entity\ListHasProduct的代码吗?
  • @cheesemacfly 查看我的版本,我修复了该错误,但现在出现了另一个错误
  • 你能粘贴你的BillDetail实体吗?
  • @benatespina 更新主帖

标签: symfony doctrine-orm symfony-2.3


【解决方案1】:

[Doctrine\ORM\Mapping\MappingException] 单个 id 不允许在 实体 ShoppingBundle\Entity\BillDetail 中的复合主键

BillDetail 有一个复合主键:

  • 身份证
  • 用户
  • 交易
  • 目录

所以,有两种方法可以避免这个错误:

  1. 从其他属性中删除@ORM\Id注释,以便将ID作为唯一的ID字段
  2. 例如,使用复合键触发 CRUD 查询,您通常可以这样做:

     // find by id
    $bill = em->find('ShoppingBundle\Entity\BillDetail', 3);
    

    根据您的映射,您必须这样做:

    // find by composite key
    $bill = em->find('ShoppingBundle\Entity\BillDetail', array(
        'id'=> $idRequested, 
        'user' => $userRequested, 
        'transaction' => $transactionRequested, 
        'catalog' => $catalogRequested 
    ));
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-12
    • 2020-01-05
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多