1

私は 3 つのテーブルを持っています: TopicsUsersおよびDetails(これらはカスタム フォーラムのテーブルの一部です)

Topicsトピックを作成したユーザーの ID (FK) を (他の通常のフィールドと共に) 含みます。 Usersニック/パスと ID (PK) を Details含みます (他の通常のフィールドの中で) ユーザーの ID (FK) を含みます。

関係: 1 人のユーザーが 1 つの詳細を持つことができます。1 人のユーザーが複数のトピックを持つことができますが、トピックを作成できるのは 1 人のユーザーだけです。

トピックの関係:

return array(
'user' => array(self::BELONGS_TO, 'User', 'User_iduser'),
);

ユーザー関係:

return array(
    'details' => array(self::HAS_ONE, 'Details', 'User_iduser'),
);

トピックとユーザーの詳細を含むリストを取得しようとしています (たとえば、トピック名とユーザー名としましょう)。

現在、私はこれを持っています:

$dataProvider=new CActiveDataProvider('Topic', array(
    'criteria'=>array(
    'with'=>array('user.details')
    )
));

しかし、ご想像のとおり、機能していません (テーブルのユーザーまたは詳細から何も選択していないことを読んでください)。

コードの何が問題になっていますか?


+++++++++++++++

このコードは、テーブル user (およびトピック テーブル) からフィールドを選択します。

Topic::model()->with('user')->findAll();


ただし、これは詳細、ユーザー、およびトピックから選択しません。

Topic::model()->with('user.details')->findAll();

また、CActiveDataProviderzii ウィジェットに必要なソリューションが必要です (つまり、コードの何らかの変更Topic::model()->with()....が 3 つのテーブルから選択されたとしても、それはあまり役に立ちません)。

編集: (Yii からの SQL ログ)

Querying SQL: SELECT COUNT(DISTINCT `t`.`idtema`) FROM `tema` `t`  LEFT
OUTER JOIN `usuario` `usuarioIdusuario` ON
(`t`.`Usuario_idusuario`=`usuarioIdusuario`.`idusuario`)  LEFT OUTER JOIN
`detallesusuario` `detallesusuario` ON
(`detallesusuario`.`Usuario_idusuario`=`usuarioIdusuario`.`idusuario`) 

Querying SQL: SELECT `t`.`idtema` AS `t0_c0`, `t`.`Usuario_idusuario` AS
`t0_c1`, `t`.`Categoria_idcategoria` AS `t0_c2`, `t`.`tema` AS `t0_c3`,
`t`.`fecha_hora` AS `t0_c4`, `usuarioIdusuario`.`idusuario` AS `t1_c0`,
`usuarioIdusuario`.`nick` AS `t1_c1`, `usuarioIdusuario`.`contrasena` AS
`t1_c2`, `usuarioIdusuario`.`email` AS `t1_c3`,
`detallesusuario`.`Usuario_idusuario` AS `t2_c0`,
`detallesusuario`.`nombre` AS `t2_c1`, `detallesusuario`.`apellidos` AS
`t2_c2`, `detallesusuario`.`cumpleanos` AS `t2_c3`,
`detallesusuario`.`telefono1` AS `t2_c4`, `detallesusuario`.`telefono2` AS
`t2_c5` FROM `tema` `t`  LEFT OUTER JOIN `usuario` `usuarioIdusuario` ON
(`t`.`Usuario_idusuario`=`usuarioIdusuario`.`idusuario`)  LEFT OUTER JOIN
`detallesusuario` `detallesusuario` ON
(`detallesusuario`.`Usuario_idusuario`=`usuarioIdusuario`.`idusuario`) 
LIMIT 10
4

2 に答える 2

2

線の代わりに

'with'=>array('user.details')

使用する

'with'=>array('user')

それから加えて

$criteria->compare( 'user.details', $query, true );
$criteria->together = true;
}

* $query は、列の詳細で検索される変数です

于 2015-04-14T15:44:47.567 に答える
2

これを試して

$dataProvider=new CActiveDataProvider('Topic', array(
    'criteria'=>array(
    'with'=>array('user'=>array('alias'=>'user','with'=>array('details'=>array('alias'=>'details'))))
    )
));

Topic::model()->with(array('user'=>array('alias'=>'user','with'=>array('details'=>array('alias'=>'details')))))->findAll();
于 2012-09-10T12:32:57.137 に答える