Symfony 没有为实体指定标识符/主键为什么使用KNP Translateable
我正在使用Symfony 没有为实体指定标识符/主键为什么使用KNP Translateable,symfony,symfony4,Symfony,Symfony4,我正在使用Knp/DoctrineBehaviors翻译我的数据库内容。 我遵循并创建了两个实体,一个用于不可翻译的内容,另一个用于可翻译的字段 namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface; use Knp\DoctrineBehaviors\Model\Translatable\Translatab
Knp/DoctrineBehaviors
翻译我的数据库内容。
我遵循并创建了两个实体,一个用于不可翻译的内容,另一个用于可翻译的字段
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
use Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait;
/**
* Class Test
* @package App\Entity
* @ORM\Entity()
*/
class Test implements TranslatableInterface
{
use TranslatableTrait;
/**
* @var integer
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Id()
*/
private $id;
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @param int $id
*/
public function setId(int $id): void
{
$this->id = $id;
}
}
以及翻译实体:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Contract\Entity\TranslationInterface;
use Knp\DoctrineBehaviors\Model\Translatable\TranslationTrait;
/**
* Class TestTranslation
* @package App\Entity
* @ORM\Entity()
*/
class TestTranslation implements TranslationInterface
{
use TranslationTrait;
/**
* @var
* @ORM\Column(type="string")
*/
private $name;
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name): void
{
$this->name = $name;
}
}
我还在我的bundles.php文件中添加了这个包
但是当我运行命令
php-bin/console-doctor:schema:update--force
在中创建表时,给出错误:没有为实体“App\Entity\TestTranslation”指定标识符/主键。每个实体都必须有一个标识符/p主键。
实体“TestTranslation”中缺少主键。
在条令中,每个实体类都必须有一个标识符/主键。您可以选择用作@Id()注释标识符的字段,或者在您的示例中选择@ORM\Id()
例如,将其添加到实体中:
/**
* @var integer
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Id()
*/
private $id;
然后,可以播放命令:
phpbin/console d:s:u--force
实体“TestTranslation”中缺少主键。
在条令中,每个实体类都必须有一个标识符/主键。您可以选择用作@Id()注释标识符的字段,或者在您的示例中选择@ORM\Id()
例如,将其添加到实体中:
/**
* @var integer
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Id()
*/
private $id;
然后,您可以播放命令:
php-bin/console d:s:u--force
在我的示例Symfony 3.4中,我忘记注册bundle并将config.yml设置为:
knp_doctrine_behaviors:
translatable: true
在我的Symfony 3.4中,我忘记注册bundle并将config.yml设置为:
knp_doctrine_behaviors:
translatable: true