【问题标题】:Symfony accessing custom propel querySymfony 访问自定义推进查询
【发布时间】:2012-03-03 19:53:45
【问题描述】:

我正在尝试使用带有推进 ORM 的 Symfony 1.4 来完成我认为是一项微不足道的任务。我有一个自定义静态类设置,我想用它通过搜索项目的名称来返回行的 ID。

这是我的功能:

static public function getItemIdByName ( $name )
{
    $criteria = new Criteria();
    $criteria-> clearSelectColumns();
    $criteria -> add (ItemsPeer::ITEM_NAME, $name, Criteria::LIKE );
    $criteria -> addSelectColumn(ItemsPeer::ITEM_ID);
    $criteria -> setLimit (1);

    $itemID = ItemsPeer::doSelect( $criteria );

    return $itemID;
}

现在,当我返回 $itemID 时,我得到了项目的名称。但是,我根本无法获得 item_id 列。我试过返回 $itemID[1] 和其他几个列索引,但它说这些不存在。如果我 print_r($itemID),我会看到该表中每一列的数组,仅有的两个值是 item_id 和 item_name。但是,我仍然找不到返回或访问该变量的方法。

有什么建议吗?

【问题讨论】:

    标签: php mysql symfony1 propel


    【解决方案1】:

    我认为错误在clearSelectColumns 的位置,但我可能弄错了。尝试使用 doSelectStmt 而不是 doSelect:

    $c = new Criteria();
    $c->add(ItemsPeer::ITEM_NAME, $name, Criteria::LIKE);
    $c->clearSelectColumns();
    $c->addSelectColumn(ItemsPeer::ITEM_ID);
    $c->setLimit(1);
    
    $stmt = ItemsPeer::doSelectStmt($c);
    return $stmt->fetch(PDO::FETCH_COLUMN); // $itemID
    

    这应该可以解决您的问题。但是,如果您使用的是 sf 1.4 并且 Propel >= 1.5,我建议您使用 Propel Query:

    return ItemsQuery::create()
      ->filterByItemName($name . '%')
      ->select('ItemId')
      ->findOne();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      相关资源
      最近更新 更多