1

(8 odpowiedzi, napisanych Model-Widok-Kontroler)

duke_piotr napisał/a:

A to nie o to chodzilo w jego problemie?

Nie, nie o to chodziło. Bazowałem ciągle na tym co mi zwracał SQL, ale okazało się że recursive jednak działa po podejrzeniu składni w debuggerze.
No a mój błąd był taki, że w widoku odnosiłem się do tego na czym mi zależało przez ['Region']['name'], a prawidłowo powinno być ['Town']['Region']['name'].

W każdym bądź razie dzięki za pomoc - chociaż coś się na forum działo wink

2

(8 odpowiedzi, napisanych Model-Widok-Kontroler)

$this->Corporation->Town->Region->findAll();

daje

SELECT `Region`.`id`, `Region`.`name` FROM `regions` AS `Region`

3

(8 odpowiedzi, napisanych Model-Widok-Kontroler)

Próbowałem już te kombinacje...

SQL zwraca

SELECT `Corporation`.`id`, `Corporation`.`name`, `Corporation`.`town_id`, `Town`.`id`, `Town`.`name`, `Town`.`region_id` FROM `corporations` AS `Corporation` LEFT JOIN `towns` AS `Town` ON (`Corporation`.`town_id` = `Town`.`id`) WHERE 1 = 1 ORDER BY Corporation`.`name` DESC

Ciągle brakuje LEFT JOIN'a z tabelą regions...

No nic, będę musiał to załatwić długim, niechlujnym i niezgodnym z ideą programowania obiektowego $this->model->query()

4

(8 odpowiedzi, napisanych Model-Widok-Kontroler)

Problem podobny do opisanego tutaj.
Mam 3 tabele corporations, towns, regions. Oczywiście w corporations jest kolumna town_id, no i w towns jest kolumna region_id.

Modele:

class Corporation extends AppModel
{
    var $name='Corporation';
    var $belongsTo='Town';
}
class Town extends AppModel
{
    var $name='Town';
    var $belongsTo='Region';
}
class Region extends AppModel
{
    var $name='Region';
}

I teraz wywołując w kontrolerze corporations_controller

$this->set('corporation',$this->Corporation->findAll("ORDER BY Corporation.name ASC"));

chciałbym uzyskać też informację taką jak Region.name

Zmieniłem więc model corporations na

class Corporation extends AppModel
{
    var $name='Corporation';
    var $recursive=2;
    var $belongsTo='Town';
}

i nadal lipa ;( Tak jakby recursive w ogóle nie działało... Może trzeba gdzieś w konfigu coś zamieszać?

Mimo iż recursive jest ustawione na 2, SQL zwraca:

SELECT `Corporation`.`id`, `Corporation`.`name`, `Corporation`.`town_id`, `Town`.`id`, `Town`.`name`, `Town`.`region_id` FROM `corporations` AS `Corporation` LEFT JOIN `towns` AS `Town` ON (`Corporation`.`town_id` = `Town`.`id`) ORDER BY `Corporation`.`name` ASC

Czyli efekt jest taki sam jak wtedy gdy recursive jest ustawione na 0 lub na 1. Nie wiem, może coś robię źle, proszę o pomoc...