symfony从数组中获取数据

时间:2010-05-10 09:39:52

标签: sql arrays symfony1 doctrine

我正在尝试使用SQL查询将数据从我的数据库中获取到symfony项目的模板中。

我的疑问:

SQL:
SELECT l.loc_id AS l__loc_id, l.naam AS l__naam, l.straat AS l__straat, 
l.huisnummer AS l__huisnummer, l.plaats AS l__plaats, l.postcode AS l__postcode,
l.telefoon AS l__telefoon, l.opmerking AS l__opmerking, o.org_id AS o__org_id, o.naam AS o__naam 
FROM locatie l 
LEFT JOIN organisatie o 
ON l.org_id = o.org_id

这是由这个DQL生成的:

DQL:
 $this->q = Doctrine_Query::create()
->select('l.naam, o.naam, l.straat, l.huisnummer, l.plaats, l.postcode, l.telefoon, l.opmerking')
->from('Locatie l')
->leftJoin('l.Organisatie o')
->execute();

但现在当我尝试通过执行以下操作来访问模板中的数据时:

<?php foreach ($q as $locatie): ?>
<?php echo $locatie['o.naam'] ?>

<?php foreach ($q as $locatie): ?>
<?php echo $locatie['o__naam'] ?>

我从symfony收到错误:

500 | Internal Server Error | Doctrine_Record_UnknownPropertyException
Unknown record property / related component "o__naam" on "Locatie"

有谁知道这里出了什么问题?如果两个查询中的名称都不起作用,我不知道如何调用数组中的值。

2 个答案:

答案 0 :(得分:1)

Doctrine会将您的结果保存到与查询中的模型相对应的对象中。在您的情况下,这些将是LocatieOrganisatie。因此,您应该能够按如下方式访问数据:

<?php foreach ($q as $obj): ?>
  <?php echo $obj->Locatie->naam; ?>
  <?php echo $obj->Organisatie->naam; ?>
<?php endforeach; ?>

如果在Locatie表类中使用上述方法并使用self::create("l")创建方法,则在视图中使用的对象将不需要->Locatie部分。

编辑:表格方法示例:

class LocatieTable extends Doctrine_Table
{
  public function getLocaties()
  {
      $q = self::createQuery("l")
      ->select('l.naam, o.naam, l.straat, l.huisnummer, l.plaats, l.postcode, l.telefoon, l.opmerking')
      ->leftJoin('l.Organisatie o')
      ->execute();

      return $q;
  }      
}

您应该能够在lib/model/doctrine/LocatieTable.class.php中自动生成此类(可能为空)。现在用:

来调用它
$this->q = Doctrine::getTable("Locatie")->getLocaties();

答案 1 :(得分:0)

如果你想知道如何从结果DoctrineRecord对象中获取一些值,我建议使用var_dump($ obj-&gt; toArray())方法来获得对象结构的清晰视图。之后,您可以使用几种类型的getter来重新搜索您想要的内容(例如$ obj-&gt; A-&gt; b,$ obj-&gt; getA() - &gt; getB()等。)