Tabele

KSIAZKI
id PK
tytul

AUTORZY
id PK
imie
nazwisko

KSIAZKI_AUTORZY
id_ksiazki PK
id_autorzy PK


Czyli jedna książka może mieć wielu autorów i jeden autor może być w wielu książkach.

action.class.php:
  1. <?php
  2. class bibliotekaActions extends sfActions
  3. {
  4.  public function executeIndex(sfWebRequest $request)
  5.  {
  6.      $this->ksiazki_list = Doctrine::getTable('Ksiazki')->getWszystko();  
  7.  }
  8. }
  9. ?>


indexSuccess.php:
  1. <table id="lista" cellspacing="0">
  2. <tr>
  3. <th>Opcja</th>
  4. <th>Tytul</th>
  5. <th>Imie</th>
  6. <th>Nazwisko</th>
  7. </tr>
  8. </thead>
  9. <?php foreach ($ksiazki_list as $ksiazki): ?>
  10. <tr>
  11. <td><a href="<?php echo url_for('biblioteka/polacz?id='.$ksiazki['id']) ?>">Zmień autorów <?php echo $ksiazki->getid() ?></a></td>
  12. <td><?php echo $ksiazki->gettytul() ?></td>
  13. <td><?php echo $ksiazki->getimie() ?></td>
  14. <td><?php echo $ksiazki->getnazwisko() ?></td>
  15. </tr>
  16. <?php endforeach; ?>
  17. </tbody>




Zapytanie w KsiazkiTable.class.php:
  1. <?php
  2. class KsiazkiTable extends Doctrine_Table
  3. {
  4. public function getWszystko()
  5.  {
  6. $q = Doctrine_Query::create()
  7.      ->select('k.*, a.imie AS imie, a.nazwisko AS nazwisko')
  8.      ->from('Ksiazki k')
  9.      ->leftJoin('k.KsiazkiAutorzy ka')
  10.      ->leftJoin('ka.Autorzy a');
  11.  
  12. return $q->execute();
  13. }
  14. }
  15. ?>


Czyli w przetłumaczeniu:
  1. <?php
  2. SELECT  k.id AS  k__id, k.tytul AS  k__tytul, a.imie AS  a__0, a.nazwisko AS  a__1 FROM ksiazki k LEFT JOIN ksiazki_autorzy k2 ON k.id = k2.id_ksiazki LEFT JOIN autorzy a ON k2.id_autorzy = a.id
  3. ?>


Powyższe zapytanie po wklejeniu do phpmyadmina zwraca poprawne wartości czyli np.
1 Ksiazka1 Aleksander Fredro
1 Ksiazka1 Adam Mickiewicz
2 Ksiazka2 null null

Tymczasem na stronie jest to wyswietlane tak jakby ta sama ksiazka nie mogla sie powtorzyc czyli:
1 Ksiazka1 Aleksander Fredro
2 Ksiazka2 null null

Zniknęło: 1 Ksiazka1 Adam Mickiewicz


Dlaczego questionmark.gif

////////////////////////////////////////////////////////////////////////////

W pliku indexSuccess.php dałem na końcu:


<?php
$polaczenie=mysql_connect ("localhost", "root", "") or die ("Nie można połączyć się z MySQL");
mysql_select_db ("baza_ksiazek") or die ("Nie można połączyć się z bazą cwphp");

$z = mysql_query ("SELECT k.id AS k__id, k.tytul AS k__tytul, a.imie AS a__0, a.nazwisko AS a__1 FROM ksiazki k LEFT JOIN ksiazki_autorzy k2 ON k.id = k2.id_ksiazki LEFT JOIN autorzy a ON k2.id_autorzy = a.id");
while ($wiersz = mysql_fetch_assoc ($z))
{
$tytul = $wiersz['k__tytul'];
echo "$tytul <br/>";
}
?>

Wyświetliło mi poprawnie 3 tytuły exclamation.gif Czyli coś w symfony musi być nie tak. Napisali własną wersję foreach czy jak ?