我正在尝试使用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"
有谁知道这里出了什么问题?如果两个查询中的名称都不起作用,我不知道如何调用数组中的值。
答案 0 :(得分:1)
Doctrine会将您的结果保存到与查询中的模型相对应的对象中。在您的情况下,这些将是Locatie
和Organisatie
。因此,您应该能够按如下方式访问数据:
<?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()等。)