related() problem v latte : Call to a member function related() on a non-object

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
blueticket
Člen | 41
+
0
-

Dobry den,

snazim se udelat sablonu s komentama pro timeline. Timeline row zobrazuji a vse funguje naderne. Jenomze kdyz se pokusim zobrazit komentare ke kazdemu eventu pres related() dostanu chybu:

Call to a member function related() on a non-object

takhle vypada sablona (zjednodusene):

{foreach $timeline_rows as $row}

            {snippet areaComments}
                {snippet comment-$row->id}
                    {foreach $row->related("tbl_comments.timeline_id") as $row_comments}
                        <div class="col-lg-12 col-md-12 col-xs-12" style="padding:5px 0px 5px 0px;border-top:#EDEBE4 1px solid;">
                            <img class="user-block-thumb" src="img/dog1.jpg"/>
                            <span class="notification-item-header text-uppercase"><a n:href="" style="color:#a5987f;">Viktorij Dogshow</a></span>
                            <span class="notification-item-event-time">{$row_comments->comment_date_time|date:'%d.%m.%Y'}</span>
                            <span class="notification-item-event" style="color:black">{$row_comments->comment}</span>
                        </div>
                    {/foreach}
                {/snippet}
            {/snippet}
{/foreach}

A takle plnim timeline_rows v presenteru:

// Data model

    function getTimeline($id = 0) {
        $rows = NULL;

        if ($id == 0)
            $rows = $this->database->query("SELECT tbl_timeline.*, (IF(tbl_timeline.profile_id>=300000000,(SELECT owner_profile_picture FROM tbl_userowner WHERE id=tbl_timeline.profile_id), (SELECT kennel_profile_picture FROM tbl_userkennel WHERE tbl_userkennel.id=tbl_timeline.profile_id))) as timeline_profile_image, (IF(tbl_timeline.profile_id>=300000000,(SELECT concat(tbl_user.name,' ',tbl_user.surname) as timeline_name FROM tbl_user WHERE tbl_user.id=(SELECT user_id FROM tbl_userowner WHERE id=tbl_timeline.profile_id)), (SELECT kennel_name FROM tbl_userkennel WHERE tbl_userkennel.id=tbl_timeline.profile_id))) as timeline_name FROM tbl_timeline order by `date` DESC");
        else
            $rows = $this->database->query("SELECT tbl_timeline.*, (IF(tbl_timeline.profile_id>=300000000,(SELECT owner_profile_picture FROM tbl_userowner WHERE id=tbl_timeline.profile_id), (SELECT kennel_profile_picture FROM tbl_userkennel WHERE tbl_userkennel.id=tbl_timeline.profile_id))) as timeline_profile_image, (IF(tbl_timeline.profile_id>=300000000,(SELECT concat(tbl_user.name,' ',tbl_user.surname) as timeline_name FROM tbl_user WHERE tbl_user.id=(SELECT user_id FROM tbl_userowner WHERE id=tbl_timeline.profile_id)), (SELECT kennel_name FROM tbl_userkennel WHERE tbl_userkennel.id=tbl_timeline.profile_id))) as timeline_name FROM tbl_timeline where profile_id = ? order by `date` DESC", $id);

        return $rows;
    }


// Presenter:
        $this->template->timeline_rows = $this->data_model->getTimeline($id);

Muzete mi prosim poradit, co zas delam blbe?

Dik moc

David Matějka
Moderator | 6445
+
+1
-

ten foreach musi byt uvnitr snippetu areaComments

blueticket
Člen | 41
+
0
-

prohodil jsem to, ale stejne to nejde :(

David Matějka
Moderator | 6445
+
+2
-

Ajo uz to vidim.. jelikoz pouzivas normalni sql a nevyuzivas NDBT ($database->table()), tak related nebude fungovat.

blueticket
Člen | 41
+
0
-

dokud vymyslim neco jineho, tak jsem predelal DataModel funkci, ktera vraci timeline rows, docasne tak, ze generuji temp tabulku, ale vysledek je porad stejny :( . Pro jistotu prikladam opet kody modelu controleru a template.

Fakt dekuju moc

Kod z DataModelu

function getTimeline($id = 0) {
    $rows = NULL;

    $table = "tbl_" . rand(100000000, 999999999);

    if ($id == 0)
        $this->database->query("CREATE TABLE $table SELECT tbl_timeline.*, (IF(tbl_timeline.profile_id>=300000000,(SELECT owner_profile_picture FROM tbl_userowner WHERE id=tbl_timeline.profile_id), (SELECT kennel_profile_picture FROM tbl_userkennel WHERE tbl_userkennel.id=tbl_timeline.profile_id))) as timeline_profile_image, (IF(tbl_timeline.profile_id>=300000000,(SELECT concat(tbl_user.name,' ',tbl_user.surname) as timeline_name FROM tbl_user WHERE tbl_user.id=(SELECT user_id FROM tbl_userowner WHERE id=tbl_timeline.profile_id)), (SELECT kennel_name FROM tbl_userkennel WHERE tbl_userkennel.id=tbl_timeline.profile_id))) as timeline_name FROM tbl_timeline order by `date` DESC");
    else
        $this->database->query("CREATE TABLE $table SELECT tbl_timeline.*, (IF(tbl_timeline.profile_id>=300000000,(SELECT owner_profile_picture FROM tbl_userowner WHERE id=tbl_timeline.profile_id), (SELECT kennel_profile_picture FROM tbl_userkennel WHERE tbl_userkennel.id=tbl_timeline.profile_id))) as timeline_profile_image, (IF(tbl_timeline.profile_id>=300000000,(SELECT concat(tbl_user.name,' ',tbl_user.surname) as timeline_name FROM tbl_user WHERE tbl_user.id=(SELECT user_id FROM tbl_userowner WHERE id=tbl_timeline.profile_id)), (SELECT kennel_name FROM tbl_userkennel WHERE tbl_userkennel.id=tbl_timeline.profile_id))) as timeline_name FROM tbl_timeline where profile_id = ? order by `date` DESC", $id);

    $this->database->query("ALTER TABLE $table ADD PRIMARY KEY (`id`)");

    $rows = $this->database->table($table);

    //$this->database->query("DROP TABLE IF EXISTS $table");

    return $rows;
}

Kod v presenteru :

$this->template->timeline_rows = $this->data_model->getTimeline($id);

Kod sablony

{foreach $timeline_rows as $row}

            {snippet areaComments}
                {foreach $row->related("tbl_comments.timeline_id") as $row_comments}
                    {snippet comment-$row->id}
                        <div class="col-lg-12 col-md-12 col-xs-12" style="padding:5px 0px 5px 0px;border-top:#EDEBE4 1px solid;">
                            <img class="user-block-thumb" src="img/dog1.jpg"/>
                            <span class="notification-item-header text-uppercase"><a n:href="" style="color:#a5987f;">Viktorij Dogshow</a></span>
                            <span class="notification-item-event-time">{$row_comments->comment_date_time|date:'%d.%m.%Y'}</span>
                            <span class="notification-item-event" style="color:black">{$row_comments->comment}</span>
                        </div>
                    {/snippet}
                {/foreach}
            {/snippet}
{/foreach}

Nemuze byt problem v tom prenaseni $rows DataModel ⇒ Presenter ⇒ View?

blueticket
Člen | 41
+
0
-

takze funguje to, jen ten foreach nemuze byt soucasti zadneho snippetu.

Editoval blueticket (11. 8. 2015 14:53)