如何在 Silverstripe 中将自定义 SQL 查询显示为模板循环?
How to display a custom SQL query as a template loop in Silverstripe?
我正在尝试将以下 SQL 查询显示为 Silverstripe 循环:
public function FilteredCompanyDivisions($SectionID)
{
$query = DB::query(
'SELECT "CompanyDivision"."Title", "Office_CompanyDivisions"."DivisionPhoneNumber"
FROM "CompanyDivision"
LEFT JOIN "Office_CompanyDivisions"
ON "CompanyDivision"."ID" = "Office_CompanyDivisions"."CompanyDivisionID"
LEFT JOIN "Section_SectionCompanyDivisions"
ON "Section_SectionCompanyDivisions"."CompanyDivisionID" = "CompanyDivision"."ID"
WHERE "Section_SectionCompanyDivisions"."SectionID" = '.$SectionID.'
AND "Office_CompanyDivisions"."OfficeID" = '.$this->ID);
运行它通过下面的代码returns一个数据对象:
$output = array();
if ($query) {
foreach ($query as $item) {
$output[] = array(
'Title' => $item['Title'],
'DivisionPhoneNumber' => $item['DivisionPhoneNumber']
);
}
}
return $output;
}
通过 Debug::show($output);
返回的数据对象如下所示:
0 =
Title =
Widget Fluffing
DivisionPhoneNumber =
06 666 6666
但以下模板代码不起作用:
<% loop FilteredCompanyDivisions($Top.ID) %>
<li>
<i class="icon-phone"></i>
<a href="tel:$DivisionPhoneNumber">$DivisionPhoneNumber</a> - $Title
</li>
<% end_loop %>
...和 returns 这个 HTML:
<li><i class="icon-phone"></i> <a href="tel:"></a> - </li>
我做错了什么以及如何在 Silverstripe 中显示自定义 SQL 作为模板循环?
您需要使用 ArrayList
和 ArrayData
而不是返回 php 数组。
$output = ArrayList::create();
if ($query) {
foreach ($query as $item) {
$output->push( ArrayData::create(array(
'Title' => $item['Title'],
'DivisionPhoneNumber' => $item['DivisionPhoneNumber']
)));
}
return $output;
}
我正在尝试将以下 SQL 查询显示为 Silverstripe 循环:
public function FilteredCompanyDivisions($SectionID)
{
$query = DB::query(
'SELECT "CompanyDivision"."Title", "Office_CompanyDivisions"."DivisionPhoneNumber"
FROM "CompanyDivision"
LEFT JOIN "Office_CompanyDivisions"
ON "CompanyDivision"."ID" = "Office_CompanyDivisions"."CompanyDivisionID"
LEFT JOIN "Section_SectionCompanyDivisions"
ON "Section_SectionCompanyDivisions"."CompanyDivisionID" = "CompanyDivision"."ID"
WHERE "Section_SectionCompanyDivisions"."SectionID" = '.$SectionID.'
AND "Office_CompanyDivisions"."OfficeID" = '.$this->ID);
运行它通过下面的代码returns一个数据对象:
$output = array();
if ($query) {
foreach ($query as $item) {
$output[] = array(
'Title' => $item['Title'],
'DivisionPhoneNumber' => $item['DivisionPhoneNumber']
);
}
}
return $output;
}
通过 Debug::show($output);
返回的数据对象如下所示:
0 =
Title =
Widget Fluffing
DivisionPhoneNumber =
06 666 6666
但以下模板代码不起作用:
<% loop FilteredCompanyDivisions($Top.ID) %>
<li>
<i class="icon-phone"></i>
<a href="tel:$DivisionPhoneNumber">$DivisionPhoneNumber</a> - $Title
</li>
<% end_loop %>
...和 returns 这个 HTML:
<li><i class="icon-phone"></i> <a href="tel:"></a> - </li>
我做错了什么以及如何在 Silverstripe 中显示自定义 SQL 作为模板循环?
您需要使用 ArrayList
和 ArrayData
而不是返回 php 数组。
$output = ArrayList::create();
if ($query) {
foreach ($query as $item) {
$output->push( ArrayData::create(array(
'Title' => $item['Title'],
'DivisionPhoneNumber' => $item['DivisionPhoneNumber']
)));
}
return $output;
}