alex
alex

Reputation: 307

How to render has_many in template?

I have two classes : Letter and LetterFiles (attached files to the letter):

class Letter extends DataObject {
    private static $db = array(
        'Sender' => 'Text',
        'SendTo' => 'Text',
        ...
    );

    private static $has_many = array(
        'Letters' => 'LetterFiles'
    );
    ...
}

class LetterFiles extends File {
    private static $has_one = array(
        'Files' => 'Letter'
    );
    ...
}

I want to show all letters and all attached files on LetterPage:

class LetterPage extends Page {
}

class LetterPage_Controller extends Page_Controller {
    public function index() {
        $letters = Letter::get()->sort('DateUpload');
        return array(
            'AllLetters' => $letters
        );
    }
}

I try to use template LetterPage.ss:

   <% loop $AllLetters %>
        <tr>
            ...
            <td>$Sender</td>
            <td>$SendTo</td>
            <td>$Theme</td>
            <td>
                  <% loop $Files %>
                      $Name
                  <% end_loop %>
            </td>
        </tr>
   <% end_loop %>

But <% loop $Files %> doesn't work. How to show attached files in this template?

Upvotes: 0

Views: 71

Answers (1)

Lorentz
Lorentz

Reputation: 691

Think you're just using the wrong relation name, should be Letters and not Files:

<% loop AllLetters %>
    $Sender
    $SendTo
    <% loop Letters %>
        $ID
    <% end_loop %>
<% end_loop %>

Upvotes: 5

Related Questions