CakePHP if else以显示数组或第一行(一行)或NULL php回显

CakePHP if else以显示数组或第一行(一行)或NULL php回显,php,arrays,cakephp,if-statement,echo,Php,Arrays,Cakephp,If Statement,Echo,我有一个表格,在任何时候都可能没有任何东西可以显示,一行或多行 在我的第一次尝试中,我将变量设置为查找ALL的数组,但是很明显,如果有1行或0行,CakePHP会抛出一个为FOREACH提供的无效参数。我可以先设置数组查找,但是如果有超过1行,它将只显示第一行 有人有什么建议吗 现场控制器中的功能: public function add($id){ //Set Title, Stylesheet, homelogo & layout $this->set('

我有一个表格,在任何时候都可能没有任何东西可以显示,一行或多行

在我的第一次尝试中,我将变量设置为查找ALL的数组,但是很明显,如果有1行或0行,CakePHP会抛出一个为FOREACH提供的无效参数。我可以先设置数组查找,但是如果有超过1行,它将只显示第一行

有人有什么建议吗

现场控制器中的功能:

public function add($id){

    //Set Title, Stylesheet, homelogo & layout  
    $this->set('title_for_layout', 'View Invoices');
    $this->set('stylesheet_used', 'homestyle');
    $this->set('image_used', 'eBOXLogoHome.png');   
    $this->layout='home_layout';

    //Find all fields where template_id = template_id passed in
    //ARRAY: to print foreach loop ONLY WORK >2 Row returned
    $templatefields=$this->Field->find('all', array(
    'conditions' => array(
    'Field.template_id' => $id)));

    //Find all fields where template_id = template_id passed in
    //FIRST: to print echo variable ONLY WORK =1 Row returned
    //$templatefields=$this->Field->find('first', array(
    //'conditions' => array(
    //'Field.template_id' => $id)));

    //Set variables
    $this->set('templatefields', $templatefields); 
}
传入的$id是字段所属的模板id

字段/add.ctp中的显示功能

<?php
if (is_array($templatefields))
{
    foreach ($templatefields as $templatefield)
    {
        <tr>
            <td align='center'><?php echo $templatefields['Field']['name']; ?></td>
            <td align='center'><?php echo $templatefields['Field']['description']; ?></td>
            <td align='center'><?php echo $templatefields['Field']['default_value']; ?></td>
            <td align='center'><?php echo $templatefields['Field']['template_id']; ?></td>
        </tr>
    }
}
else if (count($templatefields)==1)
{
    ....print? --> WOULD HAVE TO USE $templatefields where find('first') 
    ....otherwise error=invalid argument supplied for foreach
}
else if (empty($templatefields))
{
    ....NULL
    ....OR "There are no fields to display"
}
?>

}
}
else if(计数($templatefields)==1)
{
..打印?-->必须在查找('first')的位置使用$templatefields
..否则错误=为foreach提供的参数无效
}
else if(空($templatefields))
{
无效的
…或“没有要显示的字段”
}
?>
find('all')
返回
false
或数组

因此,
$templatefields
要么是
false
,要么是数组-始终。即使它只是一个结果,它仍然是相同的格式,仍然是一个数组

您的代码(已修改):



find('all'…)语句有什么问题?我不明白。执行
find('all')
,如果没有结果,则显示“对不起,这里什么都没有”消息,否则将遍历所有找到的结果(可能只有一个)并输出它们。我不明白为什么一个结果在这里是一个特例。如果你找到(全部)它需要一个数组,那么当你为每个循环&只有一行,它不是数组&它抛出一个“为每个循环提供的参数无效”,。。因为从技术上讲,它找不到“数组”。在您的
foreach
中,您仍然在引用
$templatefieldS
-这不应该是
$templatefield
find('all')
返回一个数组,与找到的记录数无关。(如果没有,则为假)好的,谢谢。foreach循环昨天没有处理1条记录,但是如果它确实像上面那样工作,我可能只是重复检查代码——可能是其他原因引发了错误。谢谢
<?php
if(empty($templatefields)) {

    //display "none found" message

} else {

    foreach ($templatefields as $templatefield) { ?>
        <tr>
            <td align='center'><?php echo $templatefields['Field']['name']; ?></td>
            <td align='center'><?php echo $templatefields['Field']['description']; ?></td>
            <td align='center'><?php echo $templatefields['Field']['default_value']; ?></td>
            <td align='center'><?php echo $templatefields['Field']['template_id']; ?></td>
        </tr>
    <?php }
}