1

Yii でこのコードを取得しました。

 $comment = Comment::model()->with(array('issue'=> array(
               'condition'=>'project_id = 1')))->findAll(array( 
                      'order' => 't.create_time DESC', 'limit' => 2, ));

「'limit'=>2」を「'limit' =>null」に変更すると、合格しました。

私が理解しているように、これらの値を変更すると、同等のクエリは次のように変更されます。

SELECT tbl_comment . * , tbl_issue . *    FROM tbl_comment
LEFT JOIN tbl_issue ON tbl_issue.id = tbl_comment.issue_id WHERE tbl_issue.project_id = 1
LIMIT null

mysql コマンド ラインを試してみましたが、上記のクエリは mysql に渡されませんでしたが、Yii で上記の CODE を使用すると渡されました。

では、なぜこの衝突が起こったのか教えていただけますか? ありがとうございました。

4

2 に答える 2

0

mysqlを実行している場合、limitでnullを「limitnull」として使用しても意味がありません。だからあなたが設定するとき

"limit"=>null 

条件では、Yiiはそれをクエリに含めず、クエリは無制限に実行されます。

ランタイムフォルダにatlogsを入れてください。mysqlクエリはそこに記録されます。application.logファイルでログを探します。

mysqlクエリがそこに記録されていない場合は、構成ファイルmain.phpを次のように変更します

// db configuration
'db'=>array(
  'connectionString'=>...
    'enableParamLogging'=>true,
    'enableProfiling'=>true,
),

// log configuration
'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                array(
                    'class'=>'CFileLogRoute',
                    'levels'=>'error, warning, trace, info, profile, packages.solr.ASolrConnection',
                ),
                // uncomment the following to show log messages on web pages
                 /*
                array(
                    'class'=>'CWebLogRoute',
                ),
                 */

            ),
        ),

これで、クエリがそこに記録されます。

于 2012-08-09T10:37:55.253 に答える
0

次のように、コメント モデルで新しい関係を作成してみてください。

class Comment extends CActiveRecord
{
    ......

    public function relations()
    {
        return array(
            'issues'=>array(self::HAS_ONE, 'Issue', 'issue_id'),
        );
    }
}  

そして、次のように呼び出します。

 $comment = Comment::model()->with('issues');

とにかく、あなたのテーブル構造は少し奇妙に見えます: コメントには 1 つの問題しかありませんか?

于 2012-08-09T08:51:16.210 に答える