Nelze mi načíst obrázky relace M:N

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

Dobrý den, mám problem s načítání obrázky

//vrací všechny volné pokoje.
$freeRooms = $this->reservationModel->freeRooms($this->form_vals['arriveDate'], $this->form_vals['leaveDate'])->fetchPairs('id');
$this->template->rooms = $freeRooms;
{foreach $rooms as $room}
                       <tr>
                           <td></td>
                           <td>
                               {foreach $room->related('images_rooms') as $room_image}
                                   <a href="{$basePath}/images/rooms/{$room_image->image->url}" data-lightbox="{$room->name}" data-title="{$room->name}" >
                                       <img src="{$basePath}/images/rooms/{$room_image->image->url}"  height="40" width="80" alt="{$room->name}">
                                   </a>
                               {/foreach}
                           </td>
                           <td>{$room->name}</td>
                           <td>{$room->price}, kč</td>
                           <td>{$room->content}</td>
                           <td>
                               {$form['room_id']->getControlPart($room->id)}
                               </td>
                           </tr>
                           {/foreach}

Tak vyhodí error Call to undefined method Nette\Database\Row::related()
Když smažu, tohle

{foreach $room->related('images_rooms') as $room_image}
    <a href="{$basePath}/images/rooms/{$room_image->image->url}" data-lightbox="{$room->name}" data-title="{$room->name}" >
        <img src="{$basePath}/images/rooms/{$room_image->image->url}"  height="40" width="80" alt="{$room->name}">
    </a>
{/foreach}

tak se zobrazí normalně, bez obrázky.

Kdybych místo

$this->template->rooms = $freeRooms;

napsal

$this->template->rooms=$this->roomModel->findAll();

Tak se mi zobrazí s obrázkama, ale ja potřebují zobrazit konkrétní obrázky, nevíte co s tím? :-(

Editoval navi89 (22. 9. 2014 13:11)

Mysteria
Člen | 797
+
0
-

Protože ->fetchPairs(‚id‘) ti to vrátí jako pole, tzn. nemůžeš na tom volat další metody, takže to zkus bez toho.

navi89
Člen | 3
+
0
-

bez ->fetchPairs(‚id‘) to nefunguje,
zkousel jsem i tohle

foreach ($freeRooms as $room_id)
        {
            $room_1=$this->roomModel->getId($room_id);

        }
        dump($room_1);
        exit;
        $this->template->rooms = $room_1;

Tak to vypisuje FALSE

David Matějka
Moderator | 6445
+
0
-

Vypada to, ze metoda freeRooms nepracuje s NDBT ($context->table(...)), ale ze sestavuje dotaz nejak rucne – pak nejde pouzit related, ref ani nic dalsiho

navi89
Člen | 3
+
0
-

matej21 napsal(a):

Vypada to, ze metoda freeRooms nepracuje s NDBT ($context->table(...)), ale ze sestavuje dotaz nejak rucne – pak nejde pouzit related, ref ani nic dalsiho

Metoda vypada takhle

public function freeRooms($arrivas, $leaves)
   {

       $q = "SELECT * FROM rooms WHERE id NOT IN (SELECT room_id FROM reservations_rooms "
               . "JOIN reservations WHERE arriveDate < '" . $leaves . "' AND departDate > '" . $arrivas . "')";

       return $this->connection->query($q);
   }

Obrázky mám uloženy v images,kde je alt a url.A pomocnou tabulku images_rooms, kde je ulozeny id romm a id image.

Editoval navi89 (22. 9. 2014 16:42)

David Matějka
Moderator | 6445
+
0
-
  1. oprav si tu sql injection – pouzij parametry
  2. pokud budes chtit pouzivat related, ref a dalsi vlastnosti NDBT, nebudes moci pouzit query, ale ->table()