php - 如何从 propel 对象集合中获取 "id"的对象?

标签 php propel

我正在使用 Propel 1.6,但我不确定如何从 Propel 对象集合中获取对象(给定其“id”属性值)。我在 Propel 的文档中找不到直接的答案(PropelCollection methods 似乎不适用?)。例如: 假设我有一个具有以下架构的“人”表:

<table name="person">
  <column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
  <column name="name" type="VARCHAR" size="100" required="true"/>
</table>

我执行以下查询以获取“Person”对象的集合:

$persons = PersonQuery::create()->find();

然后,我想找到具有给定“id”的“Person”对象(例如,“id=3”的“Person”),无需对数据库进行新查询。我该怎么做?

$persons->get(...?)?

换句话说,我不想做:

$personX = PersonQuery::create()->findOneById(3);

上下文:

我想阻止进行数据库查询以提高性能。该语句将插入到 foreach 语句中,否则会导致大量数据库连接,如下所示:

foreach ($books as $book) {
    $book['author_name'] = PersonQuery::create()->findOneById($book['author_id'])->getName();
}

最佳答案

另一种选择,尤其是当您需要多次搜索时,是使用 $collection->getArrayCopy('Id') 通过 id 获取对象数组。

$persons = PersonQuery::create()->find();
$personsById = $persons->getArrayCopy('Id');

然后你可以做

$person = $personsById[3];

if (isset($personsById[3])) {
  $person = $personsById[3];
  ...
}

关于php - 如何从 propel 对象集合中获取 "id"的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12251412/

相关文章:

php - 仅显示操作按钮以在 CakePHP 中登录管理员

php - ffmpeg 使用现有的 mp3 标签将 mp3 转换为较低的比特率

php - PHP SQL HTML 和 AJAX 提交问题

php - Laravel 5.2 Builder插入替换多行

php - 使用 Laravel 5.5 使用带有默认数据的 PhpSpreadsheet 创建 Excel 文件

php - Propel 正在丢失查询参数

php - MySQL按两列查找多条记录

PHP/MySQL Propel join with 不水化对象

php - 在 Propel 中使用 EAV 模型

php - Propel 在使用别名连接表时添加 CROSS JOIN 查询