【发布时间】:2019-08-31 21:07:08
【问题描述】:
我想在我的数据库中添加一个数组类型的字段,并且能够使用它,就像 FOSUserBundle 和角色一样。
目标是向我的用户实体添加一个包表。
我不想要一个连接表。
我复制了与角色相同的架构,并将所有这些添加到我的用户实体中
我的 User.php 实体的一些代码:
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
/**
* @var array
*
* @ORM\Column(name="packages", type="array", length=255)
*/
private $packages;
public function addPackage($package)
{
if (!in_array($package, $this->packages, true)) {
$this->packages[] = $package;
}
}
/**
* {@inheritdoc}
*
* @return array
*/
public function getPackages()
{
return $this->packages;
}
/**
* {@inheritdoc}
*/
public function setPackages(array $packages)
{
$this->packages = array();
foreach ($packages as $package) {
$this->addPackage($package);
}
return $this;
}
/**
* {@inheritdoc}
*/
public function removePackage($package)
{
if (false !== $key = array_search(strtoupper($package), $this->packages, true)) {
unset($this->packages[$key]);
$this->packages = array_values($this->packages);
}
return $this;
}
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->packages = array();
}
在我的数据库中,存在 packages 字段,并且似乎类似于角色字段。但是当我在网站上与我的用户联系时,我遇到了这个错误:
无法将数据库值 "" 转换为 Doctrine Type 数组
有人会知道代码有什么问题吗?
我的数据库截图:
【问题讨论】:
-
您要保存的阵列有多大。数据库中的列是什么类型和长度?数组类型将数组转换为字符串表示,所以插入数据库时可能会丢失数据?
-
我的数组的长度似乎是 255。类型:longtext。一切都像角色一样。我编辑我的帖子添加 2 个屏幕截图给你看
-
就个人而言,我会尝试将 DB 列类型更改为 TEXT,看看会发生什么。
-
是的,我也是这么想的,我试过了,但是这样做,当我尝试向我的包属性添加一些东西时出现错误:警告:in_array() 期望参数 2 是数组,字符串给定
-
我编辑了我的评论说数据库列类型,而不是教义类型。
标签: php arrays symfony collections roles