Doctrine:单个值的数组

时间:2017-01-15 16:30:06

标签: php doctrine-orm doctrine

到处看,但无法找到我的问题的答案。我想知道它是否可以用doctrine(symfony)保存一个字符串数组而不用它的实体。

例如:单个用户有多个邮件地址(一对多)。我不想用邮件地址保存任何其他元数据。 E.G:

<?php
class User {
    private $mailAddresses = array();
    // ...
    public function addEmailAddress($address) {
        $this->mailAddresses[] = $address;
    }
    // ....
}

$user = new User();
$user->addEmailAddress('test@test.com');
$user->addEmailAddress('anotherone@test.com');
$addresses - $user->getEmailAddresses();
// $addresses is a simple array like: array('test@test.com','anotherone@test.com');

这样的事情是可能的,还是我必须创建一个UserEmailAddressEntity才能使用一对多关系?

2 个答案:

答案 0 :(得分:2)

我使用simple_array而不是数组,因为在你的情况下,既不保存数组的索引也不保存数据类型,所以你不需要序列化。而simple_array基本上只是

implode(',', $array);

因此,您将在DB中获得简单的逗号分隔电子邮件,这很容易查询。更少的空间,更少的不必要的符号,更快的操作。

实体注释将是:

/**
* @ORM\Column(type="simple_array")
*/

或者如果您使用的是yaml:

fields:
    [...]
    emails:
       type: simple_array
    [...]

如果您自己制作表格,请在电子邮件栏中添加评论“(DC2Type:simple_array)”。

如果你需要存储关联数组,请考虑使用数组而不是simple_array。

答案 1 :(得分:1)

如果您只需要一个简单的字符串数组,则可以使用array类型:

/**
 * @ORM\Column(type="array")
 */
private $emailAddresses = [];

Doctrine会将它存储为序列化字符串,但从实体的角度来看,它将是一个数组。

如果您需要对单个元素进行更多控制而无需通过设置器修改整个阵列,您可以自由创建添加/管理电子邮件地址的方法(例如您的addEmailAddress())。

http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#array-types

相关问题