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

标签 php sql propel

我已将我的项目切换到 Propel。据我所知,为了尽可能与平台无关,Propel 不会实现特定数据库特有的某些功能(例如 MySQL 中的 LAST_INSERT_ID())。但是,我无法在 Propel's Documentation 中找到任何文档。能够一次插入多行。我也无法在 SO 上或通过搜索找到任何对它的引用。

Propel 2 中提供此功能吗?

我知道这种事情会起作用(改编自 Propel 文档):

use Propel\Runtime\Propel; 
$con = Propel::getWriteConnection(\Map\BookTableMap::DATABASE_NAME);
$sql = "INSERT INTO book (first_name,last_name) VALUES ('Leo', 'Tolstoy'),
    ('Jane','Austen')";
$stmt = $con->prepare($sql);
$stmt->execute();

但是,是否有一种不涉及直接 SQL 操作的 ORM 方法?

最佳答案

propel 的想法是让你编写尽可能少的 SQL。所以这个例子是不行的。

我不明白你所处的环境需要所有的东西立即被拯救,而不是在创造时被拯救,但我会同意。


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

  $collection = new PropelObjectCollection();

然后您将创建 propel 对象并将它们放入集合中。

  $newBook = (new Book)->setFirstName('leo')
                       ->setLastName('Tolstoy');

如果你有明确定义的数组,你也可以使用

  $newBook = (new Book)->fromArray($wellDefinedArray);

创建对象后,您可以保存它们,或者将它们弹出到集合中:

  $collection->append($newBook);

并保存集合:

  $collection->save();

我强烈认为你应该在制作对象时保存每一个:

 (new Book)->setFirstName('Leo')
           ->setLastName('Tolstoy')
           ->save();

您可以在循环中调用上面的内容,或者在循环中将它们全部附加到集合中。

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

(new PropelObjectCollection)->setModel('Book')
                            ->importFrom('JSON',$someJson)
                            ->save();

the dox 中了解 PropelObjectCollection 的强大功能

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

关于php - 如何使用 Propel 2 ORM 在一个查询中将多行插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29711619/

相关文章:

PHP - mysql_query 返回 0 行

python - SQLAlchemy:从连接多个表中获取单个对象

php - 通过多个条件插入 ORM 查找

mysql - 如何对单个空格进行字符串比较

mysql - 为什么我会收到 MySQL 错误?

mysql - 是否可以创建 mysql 查询(考虑外来列按列排序)

php - fatal error : Class ConnectionWrapper not found in ConnectionFactory. PHP

php - 如何将变体库存状态添加到 Woocommerce 产品变体下拉列表

php - 多语言数据库 : which method is better?

php - 查询数据库到表时语法错误 ';'