【问题标题】:Knp Translatable field Repository Entity has no fieldKnp 可翻译字段存储库实体没有字段
【发布时间】:2015-07-30 17:54:30
【问题描述】:

我正在使用 symfony 构建一个站点,并使用 Knp Translatable 来处理 Sonata Admin 的多语言管理。但是,可以这么说,我发现自己在一个角落里。我有一个函数来 slugify 一个名字,但 symfony 抛出一个“实体没有字段 slug”但问题是,该字段应该在我的翻译表中。

我已经看过这个了:Knplabs translatable: How to find an entry by a translatable field?

但它没有解决任何问题。

这是我的实体:

<?php

namespace Spec\Bundle\SiteBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Knp\DoctrineBehaviors\Model as ORMBehaviors;

/**
 * Artiste
 *
 * @ORM\Table()
 * @ORM\Entity()
 */
class Artiste
{
    use ORMBehaviors\Translatable\Translatable;
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="website_url", type="string", length=255, nullable=true)
     */
    private $websiteUrl;
   
    /**
      getters and setters
    **/
  
  
    public function __call($method, $arguments)
    {
        return $this->proxyCurrentLocaleTranslation($method, $arguments);
    }
}

这是实体翻译

<?php

namespace Spec\Bundle\SiteBundle\Entity;
	
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class ArtisteTranslation
{
    use ORMBehaviors\Translatable\Translation;

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

    /**
     * @ORM\Column(type="string", length=255)
     */
    protected $description;
  
    /**
     * @var string
     *
     * @ORM\Column(name="slug", type="string", length=255)
     */

    protected $slug;

    /**
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * @param  string
     * @return null
     */
    public function setName($name)
    {
        $this->name = $name;
    }

    /**
     * @return string
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * @param  string
     * @return null
     */
    public function setDescription($description)
    {
        $this->description = $description;
    }

    public function __toString()
    {
        return $this->getName();
    }


    public function setSlug($slug){$this->slug = $slug;}
    public function getSlug(){return $this->slug;}
}

这里是回购功能:

<?php

namespace Spec\Bundle\SiteBundle\Entity;

use Doctrine\ORM\EntityRepository;
use Knp\DoctrineBehaviors\ORM as ORMBehaviors;

class ArtisteRepository extends EntityRepository
{

	public function findOneBySlug($slug){
		$qb = $this->createQueryBuilder("a");
		$qb
			->select("a, t")
			->join("a.translations", "t")
			->where("t.slug = :slug")
			->setParameter("slug", $slug);

		return $qb->getQuery()->getOneOrNullResult();

	}
}

最后,我是这样调用函数的:

    public function prePersist($artiste) {
        $helper = $this->container->get("spec.site.helper");
        $slugFr = $helper->slugify($artiste->translate("fr")->getName());
        $slugEn = $helper->slugify($artiste->translate("en")->getName());
      /*
        the helper function is :
        public function slugify($slug){
            $repo = $this->em->getRepository("SpecSiteBundle:Artiste");
            $slugToReturn = $repo->findOneBySlug($slug); 
            return $slugToReturn;
        }
      */
        $artiste->translate("fr")->setSlug($slugFr);
        $artiste->translate("en")->setSlug($slugEn);
        $artiste->upload();
    }

symfony 给了我这个错误:

Entity 'Spec\Bundle\SiteBundle\Entity\Artiste' has no field 'slug'. You can therefore not call 'findOneBySlug' on the entities' repository

【问题讨论】:

  • 我解决了,只是因为我没有在我的实体中指定我的存储库。这是一个新手错误。

标签: symfony localization doctrine


【解决方案1】:

我解决了,只是因为我没有在我的实体中指定我的存储库类。这是一个菜鸟的错误。

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 2017-09-21
    • 1970-01-01
    • 2012-07-09
    • 2017-01-07
    • 1970-01-01
    • 2013-05-25
    • 2014-04-06
    • 1970-01-01
    相关资源
    最近更新 更多