1

私はテーブルを持っています.1つの行または複数の行を表示する必要はありません。

私の最初の試みでは、すべてを検索する ARRAY として変数を設定しましたが、明らかに 1 行または 0 行の場合、CakePHP は INVALID ARGUMENT SUPPLIED FOR FOREACH をスローします。ARRAY の結果を FIRST に設定することもできますが、複数の行がある場合、最初の行のみが表示されます。

誰か提案はありますか?

フィールドコントローラーの機能:

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 です。

Fields/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"
}
?>
4

1 に答える 1

3

find('all')falseまたは配列を返します。

したがって、$templatefieldsは、または配列のいずれかになりますfalse-常に。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 }
}
于 2012-08-22T16:58:30.647 に答える