Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [CakePHP] operazioni find() e modelli associati

    Salve. Mi sto dilettando nella lettura del cookbook di cakePHP, dall'inizio senza saltare nulla... proprio per evitare di andare a tentoni in quelli che saranno i miei primi tentativi di usare questo framework.
    Adesso però mi sono imbattuto in un passo un po' enigmatico ...in cui oltretutto non si capisce bene se si sta mettendo al corrente il lettore di una mancanza, di un meccanismo particolare, di una cosa che avrebbe dovuto capire già da solo o cos'altro...

    http://book.cakephp.org/view/78/asso...king-models-to

    Comunque ecco qua il succo: due modelli stanno tra di loro in relazione HABTM, il modello ricetta e il modello tag, e si vuole eseguire una ricerca tra le ricette sulla base del tag.
    Il manuale ci mette in guarda dal non usare il metodo "sbagliato".

    Codice PHP:
       1.  $this->Recipe->find('all', array('conditions'=>array('Tag.name'=>'Dessert'))); 
    (Che questo sia il metodo "sbagliato" il lettore si ritrova a doverlo accettare passivamente. E' la prima volta che viene usato il find con condizioni relative ad un modello diverso... e si è scoperto appena da dieci righe che per effetto dell'associazione dei modelli viene fatto il fetch dalla tabella associata, in questo caso tags.)

    Il risultato, dice il cookbook sarà una selezione non riuscita delle ricette, che verrano restituite tutte, con un inutile filtraggio sui tag associati che farà rimanere i soli tag "dessert". Così.

    Codice PHP:
    //Data Returned
    Array
    (  
        
    => Array
            {
            [
    Recipe] => Array
                (
                    [
    id] => 2745
                    
    [name] => Chocolate Frosted Sugar Bombs
                    
    [created] => 2007-05-01 10:31:01
                    
    [user_id] => 2346
                
    )
            [
    Tag] => Array
                (
                   [
    0] => Array
                        (
                            [
    id] => 123
                            
    [name] => Dessert
                        
    )
                )
        )
        
    => Array
            {
            [
    Recipe] => Array
                (
                    [
    id] => 2745
                    
    [name] => Crab Cakes
                    
    [created] => 2008-05-01 10:31:01
                    
    [user_id] => 2349
                
    )
            [
    Tag] => Array
                (
                }
            }

    Quale funzionamento porti a questo risultato sinceramente non l'ho capito.

    Comunque, andando avanti il manuale spiega che il metodo corretto di ottenere il risultato è il seguente:

    Codice PHP:
       1.  $this->Recipe->RecipesTag->find('all', array('conditions'=>array('Tag.name'=>'Dessert'))); 
    Recipe->RecipesTag? E cosa è? Quando è spuntata? L'unica cosa che era stata detta è che per le associazioni molti a molti bisognava creare una tabella nel DB secondo le convenzioni, e specificare la proprietà $hasAndBelongsToMany nel modello.

    Questo sembra il modello corrispondente della tabella di join... ma prima non se ne era mai parlato, credevo non esistesse. Ed è accessibile da Recipe a quanto pare (e pure da Tag?).

    Il risultato della chiamata fatta come sopra infine è:

    Codice PHP:
    //Data Returned
    Array
    (  
        
    => Array
            {
            [
    Recipe] => Array
                (
                    [
    id] => 2745
                    
    [name] => Chocolate Frosted Sugar Bombs
                    
    [created] => 2007-05-01 10:31:01
                    
    [user_id] => 2346
                
    )
            [
    Tag] => Array
                (
                   [
    0] => Array
                        (
                            [
    id] => 123
                            
    [name] => Dessert
                        
    )
                )
        )

    ...ossia il risultato "buono". Ma perché?

  2. #2

  3. #3
    up

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.