阶级似乎不是一个有管理的学说实体.你忘了画地图了吗


Class seems not to be a managed Doctrine entity. Did you forget to map it?

我想做的是获得一个Post(Post Entity)表单,在那里我可以从另一个实体(File Entity)中选择一张特色图片。

最后,我想只显示"featured Image"类型的文件,但即使我删除了query_builder,我也会遇到一个异常:

类"Site''Backend''Adminbundle''Entity''File"似乎不是托管条令实体。你忘了画地图了吗?

这是我的PostType表单

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
           ->add('title')
           ->add('thumb', 'entity', array(
                'class' => 'Site'Backend'Adminbundle'Entity'File',
                'query_builder' => function(EntityRepository $er) {
                    return $er->createQueryBuilder('f')
                        //->where('f.state = :state')
                        //->setParameter('state', $prms['state'])
                        ->orderBy('f.dateUpdated', 'DESC');
                }
           ))
}

另一方面,我有两个实体:

这是我的文件实体

<?php
namespace Site'Backend'AdminBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Symfony'Component'Validator'Constraints as Assert;
use Symfony'Component'HttpFoundation'File'UploadedFile;
use Doctrine'Common'Collections'ArrayCollection;
/**
 * Site'Backend'AdminBundle'Entity'File
 *
 * @ORM'Table()
 * @ORM'Entity
 * @ORM'HasLifecycleCallbacks
 */
class File {
/**
 * @var integer $id
 *
 * @ORM'Column(name="id", type="integer")
 * @ORM'Id
 * @ORM'GeneratedValue(strategy="AUTO")
 */
private $id;
/**
 * @var 'DateTime
 *
 * @ORM'Column(name="dateCreated", type="datetime")
 */
private $dateCreated;
/**
 * @var 'DateTime
 *
 * @ORM'Column(name="dateUpdated", type="datetime")
 */
private $dateUpdated;
/**
 * @var string $name
 *
 * @ORM'Column(name="name", type="string", length=255)
 */
private $name;
/**
 * @Assert'File(maxSize="6000000")
 */
private $file;
/**
 * @ORM'Column(type="string", length=255)
 */
public $path;
/**
 * @ORM'ManyToOne(targetEntity="TypeFile", inversedBy="files")
 */
private $type;

/**
 * @var string
 *
 * @ORM'OneToMany(targetEntity="Site'Backend'BlogBundle'Entity'Post", mappedBy="thumb")
 */
private $posts;
public function __construct() {
    $this->setDateCreated(new 'DateTime());
    $this->setDateUpdated(new 'DateTime());
    $this->type = new ArrayCollection();
}
/**
 * @ORM'PrePersist()
 * @ORM'PreUpdate()
 */
public function preUpload() {
    $this->setDateUpdated(new 'DateTime());
    if (null !== $this->file) {
        // do whatever you want to generate a unique name
        $this->path = sha1(uniqid(mt_rand(), true)) . '.' . $this->file->guessExtension();
    } else {
        //throwException($e);
    }
}
/**
 * @ORM'PostPersist()
 * @ORM'PostUpdate()
 */
public function upload() {
    if (null === $this->file) {
        return;
    }
    // if there is an error when moving the file, an exception will
    // be automatically thrown by move(). This will properly prevent
    // the entity from being persisted to the database on error
    $this->file->move($this->getUploadRootDir(), $this->path);
    unset($this->file);
}
/**
 * @ORM'PostRemove()
 */
public function removeUpload() {
    if ($file = $this->getAbsolutePath()) {
        if (file_exists($file)) {
            unlink($file);
        }
    }
}
public function getAbsolutePath() {
    return null === $this->path ? null : $this->getUploadRootDir() . '/' . $this->path;
}
public function getWebPath() {
    return null === $this->path ? null : './' . $this->getUploadDir() . '/' . $this->path;
}
protected function getUploadRootDir() {
    // the absolute directory path where uploaded documents should be saved
    return __DIR__ . '/../../../../../web/' . $this->getUploadDir();
}
protected function getUploadDir() {
    // get rid of the __DIR__ so it doesn't screw when displaying uploaded doc/image in the view.
    return 'uploads/' . $this->type;
}
/**
 * Get id
 *
 * @return integer 
 */
public function getId() {
    return $this->id;
}
/**
 * Set name
 *
 * @param string $name
 * @return File
 */
public function setName($name) {
    $this->name = $name;
    return $this;
}
/**
 * Get name
 *
 * @return string 
 */
public function getName() {
    return $this->name;
}
/**
 * Set path
 *
 * @param string $path
 * @return File
 */
public function setPath($path) {
    $this->path = $path;
    return $this;
}
/**
 * Get path
 *
 * @return string 
 */
public function getPath() {
    return $this->path;
}
public function __toString() {
    return $this->name;
}
/**
 * Add type
 *
 * @param Site'Backend'AdminBundle'Entity'TypeFile $type
 * @return File
 */
public function addType('Site'Backend'AdminBundle'Entity'TypeFile $type) {
    $this->type[] = $type;
    return $this;
}
/**
 * Remove type
 *
 * @param Site'Backend'AdminBundle'Entity'TypeFile $type
 */
public function removeType('Site'Backend'AdminBundle'Entity'TypeFile $type) {
    $this->type->removeElement($type);
}
/**
 * Get type
 *
 * @return Doctrine'Common'Collections'Collection 
 */
public function getType() {
    return $this->type;
}
/**
 * Set type
 *
 * @param Site'Backend'AdminBundle'Entity'TypeFile $type
 * @return File
 */
public function setType('Site'Backend'AdminBundle'Entity'TypeFile $type = null) {
    $this->type = $type;
    return $this;
}
public function getFile() {
    return $this->file;
}
public function setFile($file) {
    $this->file = $file;
}
/**
 * Set dateCreated
 *
 * @param 'DateTime $dateCreated
 * @return File
 */
public function setDateCreated($dateCreated) {
    $this->dateCreated = $dateCreated;
    return $this;
}
/**
 * Get dateCreated
 *
 * @return 'DateTime 
 */
public function getDateCreated() {
    return $this->dateCreated;
}
/**
 * Set dateUpdated
 *
 * @param 'DateTime $dateUpdated
 * @return File
 */
public function setDateUpdated($dateUpdated) {
    $this->dateUpdated = $dateUpdated;
    return $this;
}
/**
 * Get dateUpdated
 *
 * @return 'DateTime 
 */
public function getDateUpdated() {
    return $this->dateUpdated;
}

/**
 * Add posts
 *
 * @param 'Site'Backend'BlogBundle'Entity'Post $posts
 * @return File
 */
public function addPost('Site'Backend'BlogBundle'Entity'Post $posts)
{
    $this->posts[] = $posts;
    return $this;
}
/**
 * Remove posts
 *
 * @param 'Site'Backend'BlogBundle'Entity'Post $posts
 */
public function removePost('Site'Backend'BlogBundle'Entity'Post $posts)
{
    $this->posts->removeElement($posts);
}
/**
 * Get posts
 *
 * @return 'Doctrine'Common'Collections'Collection 
 */
public function getPosts()
{
    return $this->posts;
}
}

这是我的邮政实体

<?php
namespace Site'Backend'BlogBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Doctrine'Common'Collections'ArrayCollection;
/**
 * Post
 *
 * @ORM'Table()
 * @ORM'Entity
 */
class Post
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var string
     *
     * @ORM'Column(name="title", type="string", length=255)
     */
    private $title;
    /**
     * @var 'DateTime
     *
     * @ORM'Column(name="dateCreated", type="datetime")
     */
    private $dateCreated;
    /**
     * @var 'DateTime
     *
     * @ORM'Column(name="dateUpdated", type="datetime")
     */
    private $dateUpdated;
    /**
     * @var 'DateTime
     *
     * @ORM'Column(name="datePublished", type="datetime", nullable=true)
     */
    private $datePublished;
    /**
     * @var string
     *
     * @ORM'Column(name="state", type="string", length=255)
     */
    private $state;
    /**
     * @var string
     *
     * @ORM'Column(name="content", type="text")
     */
    private $content;
    /**
     * @var Author
     * @ORM'ManyToOne(targetEntity="Site'Backend'AdminBundle'Entity'User", inversedBy="posts")
     */
    private $author;
    /**
     * @var Thumb
     * @ORM'ManyToOne(targetEntity="Site'Backend'AdminBundle'Entity'File", inversedBy="posts")
     */
    private $thumb;
    /**
     * @var Comments
     * @ORM'OneToMany(targetEntity="Comment", mappedBy="post")
     */
    private $comments;
    /**
     * @var Categories
     * @ORM'ManyToMany(targetEntity="Category", cascade={"persist"})
     */
    private $categories;
    /**
     * @var Tags
     * @ORM'ManyToMany(targetEntity="Tag", cascade={"persist"})
     */
    private $tags;
    /**
     * Constructeur
     */
    public function __construct()
    {
        $this->setDateCreated(new 'DateTime());
        $this->setDateUpdated(new 'DateTime());
        $this->comments = new ArrayCollection();
        $this->Categories = new ArrayCollection();
        $this->tags = new ArrayCollection();
    }
    public function __toString(){
        return $this->title;
    }
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set title
     *
     * @param string $title
     * @return Post
     */
    public function setTitle($title)
    {
        $this->title = $title;
        return $this;
    }
    /**
     * Get title
     *
     * @return string 
     */
    public function getTitle()
    {
        return $this->title;
    }
    /**
     * Set dateCreated
     *
     * @param 'DateTime $dateCreated
     * @return Comment
     */
    public function setDateCreated($dateCreated)
    {
        $this->dateCreated = $dateCreated;
        return $this;
    }
    /**
     * Get dateCreated
     *
     * @return 'DateTime 
     */
    public function getDateCreated()
    {
        return $this->dateCreated;
    }
    /**
     * Set dateUpdated
     *
     * @param 'DateTime $dateUpdated
     * @return Comment
     */
    public function setDateUpdated($dateUpdated)
    {
        $this->dateUpdated = $dateUpdated;
        return $this;
    }
    /**
     * Get dateUpdated
     *
     * @return 'DateTime 
     */
    public function getDateUpdated()
    {
        return $this->dateUpdated;
    }
    /**
     * Get datePublished
     *
     * @return 'DateTime 
     */
    public function getDatePublished()
    {
        return $this->datePublished;
    }
    /**
     * Set datePublished
     *
     * @param 'DateTime $datePublished
     * @return Comment
     */
    public function setDatePublished($datePublished)
    {
        $this->datePublished = $datePublished;
        return $this;
    }
    /**
     * Set state
     *
     * @param string $state
     * @return Post
     */
    public function setState($state)
    {
        $this->state = $state;
        return $this;
    }
    /**
     * Get state
     *
     * @return string 
     */
    public function getState()
    {
        return $this->state;
    }
    /**
     * Set content
     *
     * @param string $content
     * @return Post
     */
    public function setContent($content)
    {
        $this->content = $content;
        return $this;
    }
    /**
     * Get content
     *
     * @return string 
     */
    public function getContent()
    {
        return $this->content;
    }
    /**
     * Set author
     *
     * @param 'Site'Backend'AdminBundle'Entity'User $author
     * @return Post
     */
    public function setAuthor('Site'Backend'AdminBundle'Entity'User $author = null)
    {
        $this->author = $author;
        return $this;
    }
    /**
     * Get author
     *
     * @return 'Site'Backend'AdminBundle'Entity'User 
     */
    public function getAuthor()
    {
        return $this->author;
    }
    /**
     * Add comments
     *
     * @param 'Site'Backend'BlogBundle'Entity'Comment $comments
     * @return Post
     */
    public function addComment('Site'Backend'BlogBundle'Entity'Comment $comments)
    {
        $this->comments[] = $comments;
        return $this;
    }
    /**
     * Remove comments
     *
     * @param 'Site'Backend'BlogBundle'Entity'Comment $comments
     */
    public function removeComment('Site'Backend'BlogBundle'Entity'Comment $comments)
    {
        $this->comments->removeElement($comments);
    }
    /**
     * Get comments
     *
     * @return 'Doctrine'Common'Collections'Collection 
     */
    public function getComments()
    {
        return $this->comments;
    }
    /**
     * Add Categories
     *
     * @param 'Site'Backend'BlogBundle'Entity'Category $categories
     * @return Post
     */
    public function addCategory('Site'Backend'BlogBundle'Entity'Category $category)
    {
        $this->categories[] = $category;
        return $this;
    }
    /**
     * Add Categories
     *
     * @param 'Site'Backend'BlogBundle'Entity'Category $categories
     * @return Post
     */
    public function addCategoriesNew('Site'Backend'BlogBundle'Entity'Category $category)
    {
        $this->categories[] = $category;
        return $this;
    }
    /**
     * Remove Categories
     *
     * @param 'Site'Backend'BlogBundle'Entity'Category $categories
     */
    public function removeCategory('Site'Backend'BlogBundle'Entity'Category $category)
    {
        $this->categories->removeElement($category);
    }
    /**
     * Remove Categories
     *
     * @param 'Site'Backend'BlogBundle'Entity'Category $categories
     */
    public function removeCategoriesNew('Site'Backend'BlogBundle'Entity'Category $category)
    {
    }
    /**
     * Get Categories
     *
     * @return 'Doctrine'Common'Collections'Collection 
     */
    public function getCategories()
    {
        return $this->categories;
    }
    /**
     * Get Categories
     *
     * @return 'Doctrine'Common'Collections'Collection 
     */
    public function getCategoriesNew()
    {
        //return $this->categories;
    }
    /**
     * Add tags
     *
     * @param 'Site'Backend'BlogBundle'Entity'tag $tags
     * @return Post
     */
    public function addTag('Site'Backend'BlogBundle'Entity'Tag $tags)
    {
        $this->tags[] = $tags;
        return $this;
    }
    /**
     * Add tags
     *
     * @param 'Site'Backend'BlogBundle'Entity'tag $tags
     * @return Post
     */
    public function addTagsNew('Site'Backend'BlogBundle'Entity'Tag $tags)
    {
        $this->tags[] = $tags;
        return $this;
    }
    /**
     * Remove tags
     *
     * @param 'Site'Backend'BlogBundle'Entity'Tag $tags
     */
    public function removeTag('Site'Backend'BlogBundle'Entity'Tag $tags)
    {
        $this->tags->removeElement($tags);
    }
    /**
     * Remove Tags
     *
     * @param 'Site'Backend'BlogBundle'Entity'tag $tags
     */
    public function removeTagsNew('Site'Backend'BlogBundle'Entity'Tag $tags)
    {
        //$this->tags->removeElement($tags);
    }
    /**
     * Get Tags
     *
     * @return 'Doctrine'Common'Collections'Collection 
     */
    public function getTags()
    {
        return $this->tags;
    }
    /**
     * Get Tags
     *
     * @return 'Doctrine'Common'Collections'Collection 
     */
    public function getTagsNew()
    {
        //return $this->Tags;
    }
    /**
     * Add Categories
     *
     * @param 'Site'Backend'BlogBundle'Entity'Category $categories
     * @return Post
     */
    public function addCategorie('Site'Backend'BlogBundle'Entity'Category $categories)
    {
        $this->categories[] = $categories;
        return $this;
    }
    /**
     * Remove Categories
     *
     * @param 'Site'Backend'BlogBundle'Entity'Category $categories
     */
    public function removeCategorie('Site'Backend'BlogBundle'Entity'Category $categories)
    {
        $this->categories->removeElement($categories);
    }
    /**
     * @ORM'preUpdate
     */
    public function setUpdateValue(){
        $this->setDateUpdated(new 'DateTime());
    }
    /**
     * Set thumb
     *
     * @param 'Site'Backend'AdminBundle'Entity'File $thumb
     * @return Post
     */
    public function setThumb('Site'Backend'AdminBundle'Entity'File $thumb = null)
    {
        $this->thumb = $thumb;
        return $this;
    }
    /**
     * Get thumb
     *
     * @return 'Site'Backend'AdminBundle'Entity'File 
     */
    public function getThumb()
    {
        return $this->thumb;
    }
    }

提前感谢我希望我很清楚,如果不是这样,请告诉我。

尝试更改:

站点''后端''管理员bundle''实体''文件

Site''Backend''AdminBundle''Entity''File

解决此问题的另一种方法:

->add('thumb', null, array(
                  'query_builder' => function(EntityRepository $er) {
                      return $er->createQueryBuilder('f')
                            ->select('f')
                            ->leftJoin('f.type', 't')
                            ->where('t.name = :type')
                            ->setParameter('type', 'Featured Images')
                            ->orderBy('f.dateUpdated', 'DESC');
                  }
               ))

如果您使用多个连接,您可能忘记映射您的捆绑包。确保app/config/config.yml:中是这种情况

orm:
  entity_managers:
    default:
      mappings:
        AppBundle: ~
        SiteBackendAdminBundle: ~

或者,如果你想拆分为几个实体经理:

orm:
  entity_managers:
    default:
      mappings:
        AppBundle: ~
    admin:
      mappings:
        SiteBackendAdminBundle: ~

文件符号/原则:多实体管理者。

相关文章: