Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Propel 2 ORM在一个查询中将多行插入数据库?_Php_Sql_Propel - Fatal编程技术网

Php 如何使用Propel 2 ORM在一个查询中将多行插入数据库?

Php 如何使用Propel 2 ORM在一个查询中将多行插入数据库?,php,sql,propel,Php,Sql,Propel,我把我的项目改为推进。我知道,为了尽可能实现平台无关性(例如,MySQL中的LAST\u INSERT\u ID()),某些特定数据库特有的功能将不会由Propel实现。但是,我无法在中找到任何文档,无法同时插入多行。我也没能在某处或通过搜索找到它的任何参考资料 推进2中是否有此功能 我知道这样做是可行的(改编自推进文档): 然而,有没有一种ORM方法不涉及直接的SQL操作?推进的思想是让您尽可能少地编写SQL。所以这个例子是不可能的 我不明白你所处的环境要求所有的东西都立即被拯救,而不是被创造

我把我的项目改为推进。我知道,为了尽可能实现平台无关性(例如,MySQL中的
LAST\u INSERT\u ID()
),某些特定数据库特有的功能将不会由Propel实现。但是,我无法在中找到任何文档,无法同时插入多行。我也没能在某处或通过搜索找到它的任何参考资料

推进2中是否有此功能

我知道这样做是可行的(改编自推进文档):


然而,有没有一种ORM方法不涉及直接的SQL操作?

推进的思想是让您尽可能少地编写SQL。所以这个例子是不可能的

我不明白你所处的环境要求所有的东西都立即被拯救,而不是被创造出来,但我会同意的


您需要做的是从对象集合开始

  $collection = new PropelObjectCollection();
然后创建推进对象并将其放入集合中

  $newBook = (new Book)->setFirstName('leo')
                       ->setLastName('Tolstoy');
如果有定义良好的数组,也可以使用

  $newBook = (new Book)->fromArray($wellDefinedArray);
创建对象后,可以保存它们,然后将它们弹出到集合中:

  $collection->append($newBook);
  $collection->save();
并保存收藏:

  $collection->append($newBook);
  $collection->save();
我强烈认为您应该在制作对象时保存每个对象:

 (new Book)->setFirstName('Leo')
           ->setLastName('Tolstoy')
           ->save();
您可以在循环中调用上述函数,或者将它们全部附加到循环中的集合中

如果您有一个非常大的数据集,循环可能不是最好的

(new PropelObjectCollection)->setModel('Book')
                            ->importFrom('JSON',$someJson)
                            ->save();
请看一看中PropelObjectCollection的强大功能


我希望这能让你更接近答案。

不,这是不可能的。类似于CakePHP的
saveMany
()的东西在同一个表格提交多行HTML表单时会非常有用。谢谢你的反馈。我相信这个答案更适用于推进1而不是推进2,因为目前可以在推进2中使用PDO事务。希望一次写入多个插入的原因是它减少了服务器的压力。在阅读了其他文章后,ORM设计师似乎倾向于认为多个写操作通常不会引起关注。但是,当一个应用程序有多个写操作时,我相信在***Query.php文件下使用允许多行插入的语法是很有价值的。不过还是值得思考的,谢谢!这是非常糟糕的建议。典型的性能调优建议是,由于开销,尽量减少到数据库的往返次数。批量插入是一种常见的需求。如果一个工具不允许它,那么它就是一个糟糕的工具。