学说:单一价值观的阵列



到处找,但找不到我问题的答案。我想知道 doctrine (symfony) 是否有可能在不制作实体的情况下保存字符串数组。

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

<?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才能使用一对多关系?

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

implode(',', $array);

因此,您将在数据库中获得普通的昏迷分隔电子邮件,这很容易查询。更少的空间,更少的不必要的符号,更快的操作。

实体注释将是:

/**
* @ORMColumn(type="simple_array")
*/

或者,如果您使用的是 YAML:

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

如果您出于任何原因自己制作表格,请在电子邮件列中添加注释"(DC2Type:simple_array)"。

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

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

/**
 * @ORMColumn(type="array")
 */
private $emailAddresses = [];

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

如果您需要对

单个元素进行更多控制,而无需通过 setter 修改整个数组,则可以自由创建添加/管理电子邮件地址的方法(例如您的 addEmailAddress())。

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

相关内容

  • 没有找到相关文章

最新更新