我已将我的项目转为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方法?
答案 0 :(得分:2)
推动的想法是让你尽可能少地编写SQL。所以这个例子就是没有。
我不了解你所处的环境需要一次性保存而不是创造,但我会随之而去。
您需要做的是从对象集合开始。
$collection = new PropelObjectCollection();
然后你将创建推进对象并将它们放在集合中。
$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();
中查看PropelObjectCollection的强大功能
我希望这能让你更接近答案。