【发布时间】:2015-09-20 22:27:34
【问题描述】:
我想将数据从 JSON 文件导入数据库表。我将 Doctrine 与 pdo_sqlite 驱动程序一起使用,并配置了以下实体:
/**
* @Entity @Table(name="mytable")
**/
class MyClass
{
/** @Id @Column(type="integer") @GeneratedValue *
* @Column(type="integer")
*/
var $id;
/** @Column(type="string") **/
var $name;
/** @Column(type="simple_array") **/
var $parameters;
function __construct($name, $parameters)
{
$this->name = $name;
$this->parameters = $parameters;
}
// getters and setters here
}
我创建了一个简单的导入方法:
function importFromJson($tableName, $fileName)
{
if (file_exists($fileName)) {
$data = json_decode(file_get_contents($fileName));
if (is_array($data)) {
$connection = getEm()->getConnection();
foreach($data as $tuple) {
if (is_object($tuple)) {
$connection->insert($tableName, (array)$tuple);
}
}
}
}
}
我的 import.json 文件包含以下文本:
[
{
"name": "A name",
"parameters": ["a","b","c"]
}
]
当我调用我的导入方法时:
importFromJson("mytable", "import.json");
我收到以下错误:
执行 'INSERT INTO mytable 时发生异常 (名称,参数)值(?,?)' 带参数 ["A name", ["a","b","c"]]:
数组到字符串的转换 C:\myproject\vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php:119 C:\myproject\vendor\doctrine\dbal\lib\Doctrine\DBAL\Connection.php:996 C:\myproject\vendor\doctrine\dbal\lib\Doctrine\DBAL\Connection.php:696 C:\myproject\lib\import.php:39
simple_array 类型的确切用途不就是将数组转换为可以存储在数据库中的字符串吗?
【问题讨论】:
-
如果需要存储数组数据,试试
json_encode($array)函数。这会将您的数组转换为字符串。然后在检索数据时,调用json_decode($string)函数。 -
我明白了。如果你尝试设置简单的空数组会发生什么?
-
出现同样的错误,如果我使用“array”类型而不是“simple_array”,同样的事情。更奇怪的是:如果我使用“object”类型并将 JSON 文件替换为以下内容:[ {“name”:“A name”,“parameters”:{} }] 我收到错误“Object of class stdClass 无法转换为字符串"
-
为了清楚起见,您使用的是哪个版本的 Doctrine?
标签: php arrays doctrine-orm