2
function get_event($id){
            $query = $this->em->createQuery('SELECT e.name,e.date, e.time, e.venue, e.venueaddress,e.parish,e.genre, e.entryprice, e.phone, e.specialguests,
                                            e.weblink, e.otherinfo, e.flyer1, e.flyer2 from Events e WHERE e.id = :id');
            $query->setParameter('id', $id);


//CAN I VIEW THE QUERY AT THIS TIME?


            $result = $query->getResult();    
            return $result;    
        }
4

3 に答える 3

3

EchoSqlLoggerHaim Evgiによって提案されたように、まあ、ログ出力をエコーするので、あなたはそれをあなたのウェブサイトで見るべきです。

Doctrineが生成するSQLクエリを確認したいだけの場合は、次を使用します。

$query = $this->em->createQuery('SELECT e.name,e.date, e.time, e.venue, e.venueaddress,e.parish,e.genre, e.entryprice, e.phone, e.specialguests,
                                        e.weblink, e.otherinfo, e.flyer1, e.flyer2 from Events e WHERE e.id = :id');

print $query->getSQL();

ただし、パラメータはそのSQL文字列に含まれておらず、プレースホルダー(=?)として表示されることに注意してください。

Doctrineが何をするかを監視するために私が使用する最も一般的な手法は、mysql(または使用するdb)クエリログを有効にすることです(負荷の高い本番サーバーではこれを行わないでください!)。

クエリログが下/var/log/mysql/query.logにある場合は、次のようにします。

# tail -f /var/log/mysql/query.log

(詳細については、 tailコマンドを参照してください)

そして、クエリを実行するページをリロードします。

于 2011-09-12T19:50:38.957 に答える
3

教義 2.3.2 で

use Doctrine\DBAL\Logging\DebugStack;
$logger = new DebugStack();
$config->setSQLLogger($logger);

print_r($logger); で $logger を印刷できるようになりました。

于 2013-01-27T21:40:52.640 に答える
0
//create query
$oQuery = $this->em->createQuery('SELECT tbl.id FROM mytable tbl WHERE tbl.id = :id');

//print query and params
echo "SQL: ".$oQuery->getSQL();
while($param = $oQuery->getParameters()->current()){
  echo "Param: ".$param->getName()." | ".$param->getValue()." | ".$param->getType();
  $oQuery->getParameters()->next();
}

SQL: SELECT tbl.id AS id0 FROM mytable tbl WHERE tbl.id = ?

パラメータ: ID | 1 | 整数

于 2013-02-21T14:40:59.480 に答える