Yii Framework Forum: Problemi Con With Usato All'interno Degli Scopes - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problemi Con With Usato All'interno Degli Scopes Rate Topic: -----

#1 User is offline   lorenzomar 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 8
  • Joined: 28-September 09
  • Location:Rome, Italy

Posted 10 December 2012 - 10:04 AM

Ciao a tutti,
sto avendo dei problemi con l'utilizzo degli 'scopes' all'initerno dei 'with' in una query.

Vi riassumo la situazione:

ho 3 tabelle relazionate una a molti a cascata, come nello schema di seguito

Posted Image

e i tre modelli con le rispettive relations ed i rispettivi scopes, come di seguito:

class A extends CActiveRecord
{
    public function tableName()
    {
        return 'tab_a';
    }

    public function relations()
    {
        return array(
            'b' => array(self::HAS_MANY, 'B', 'id_tab_a'),
        );
    }
}


class B extends CActiveRecord
{
    public function tableName()
    {
        return 'tab_b';
    }

    public function relations()
    {
        return array(
            'a' => array(self::BELONGS_TO, 'A', 'id_tab_a'),
            'c' => array(self::HAS_MANY, 'C', 'id_tab_b'),
        );
    }

    public function defaultScope()
    {
        return array(
            'condition' => $this->getTableAlias(false, false) . '.status != "deleted"'
        );
    }
    
    
    public function scopes()
    {
        return array(
            'enabled' => array(
                'condition' => $this->getTableAlias() . '.status = "enabled"',
                'with' => array(
                    'c' => array(
                        'select' => false,
                        'joinType' => 'INNER JOIN'
                    ),
                ),
            )
        );
    }
}


class C extends CActiveRecord
{
    public function tableName()
    {
        return 'tab_c';
    }

    public function relations()
    {
        return array(
            'b' => array(self::BELONGS_TO, 'B', 'id_tab_b'),
        );
    }
}



Quello che vorrei fare è selezionare un record da A con i rispettivi record in B che hanno il campo status='enabled' e che hanno almeno un record in C collegato.
Speravo di ottenere il tutto in questo modo:

$a= A::model()->with(array(
        'b' => array(
            'scopes' => 'enabled',
        ),
))->findByPk([ID]);


invece è come se il with all'interno di enabled ( nel modello B ) non fosse applicato. :(
0

#2 User is offline   lorenzomar 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 8
  • Joined: 28-September 09
  • Location:Rome, Italy

Posted 11 December 2012 - 06:26 AM

Ho fatto delle prove ulteriori ed usando

$a= A::model()->with(array(
        'b:enabled',
))->findByPk([ID]);


tutto funziona correttamente.

Facendo un percorso a ritroso sono arrivato sul metodo buildJoinTree di CActiveFinder, ma in questo momento non ho molto tempo per approfondire....
Se qualcuno avesse già affrontato il problema o se esiste un bug noto che io non ho trovato, fatemi sapere!

(PS: in caso di bug noto che non ho trovato, scusatemi! Mi darò uno scappellotto da solo :D )
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users