[CAKE] Conditions bij ophalen model data

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
Ik heb een tabel met pagina's. Een pagina heeft een aantal vaste velden. Verder heb ik een tabel met categorieën. Een pagina kan gekoppeld zijn aan een X aantal categorieën, waarbij X 0 mag zijn, maar ook 1,2,3 etc.
M.b.v. $Page->find() haal ik een array op. Dit werkt allemaal goed. Maar nu wil ik een condition toevoegen waarbij gekeken wordt naar de categorieën. Deze staan in een array, opgedeeld in een subarray met numerieke waarden en een subarray met titels. Wanneer een subarray gegevens bevat, moet de condition worden toegevoegd.

Voorbeeld:

$options['categories'] array:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
Array
(
    [numeric] => Array
        (
        )

    [string] => Array
        (
            [0] => navigation
        )

)


Conditions:
PHP:
1
2
3
4
5
6
7
8
$conditions = array();
if(sizeof($options['categories']['numeric'])>0) {
    // hier een nieuwe condition toevoegen
}
if(sizeof($options['categories']['string'])>0) {
    // hier een nieuwe condition toevoegen
    // $conditions[] = array('Category.{n}.title' => $options['categories']['string']); //   <-- werkt niet
}


Huidige functie:
PHP:
1
2
3
$results = $Page->find('all',array(
    'conditions' => $conditions
);


Huidige results array:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Array
(
    [0] => Array
        (
            [Page] => Array
                (
                    [id] => 1
                    [title] => blaat
                )

            [Category] => Array
                (
                )

            [Tag] => Array
                (
                )

        )

    [1] => Array
        (
            [Page] => Array
                (
                    [id] => 2
                    [title] => foobar
                )

            [Category] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [title] => navigation
                            [CategoriesItem] => Array
                                (
                                    [id] => 1
                                    [category_id] => 1
                                    [item_id] => 2
                                )

                        )

                )

            [Tag] => Array
                (
                )

        )
)


Na het toevoegen van de condition moet dus alleen de tweede Page met title 'foobar' aanwezig zijn. Kan dit überhaupt als condition in de find(), moet moet ik hiervoor in de model een functie schrijven?

You cannot not communicate


Acties:
  • 0 Henk 'm!

Verwijderd

Dit is mogelijk via Complex Find Conditions.

Meer daarover is te vinden op http://book.cakephp.org/view/74/Complex-Find-Conditions

Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
Daar had ik uiteraard al op gekeken, maar geen oplossing kunnen vinden. Zet me net te bedenken of het niet makkelijker is om maar eerst de ID's van de pagina's op te halen die gekoppeld zijn ($cats) aan een categorie, en vervolgens de condition van Page.id => $cats toe te voegen. Dit zal wel werken, maar zorgt voor meer querys.

Edit: zie ook net dat de data van de Category tabel niet in de find query als join is opgenomen, maar als tweede query er achteraan wordt geplaatst. In mijn model maar ik gebruik van 'hasAndBelongsToMany'

[ Voor 24% gewijzigd door X-trace op 24-06-2009 16:06 ]

You cannot not communicate


Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
PHP:
1
$conditions[] = array('Category.{n}.title' => $options['categories']['string']); //   <-- werkt niet


veranderen in:
PHP:
1
$conditions[] = array('Category.title' => $options['categories']['string']); //   <-- werkt niet


je hoeft namelijk geen {n} op te geven bij een condition

[ Voor 10% gewijzigd door steffex op 25-06-2009 13:31 ]