Pertanyaan Eksekusi SQL mentah menggunakan Doctrine 2


Saya ingin mengeksekusi SQL mentah menggunakan Doctrine 2

Saya perlu memotong tabel database dan menginisialisasi tabel dengan data uji default.


75
2017-07-24 12:09


asal


Jawaban:


Berikut ini contoh kueri mentah dalam Doctrine 2 yang saya lakukan:

public function getAuthoritativeSportsRecords()
{   
    $sql = " 
        SELECT name,
               event_type,
               sport_type,
               level
          FROM vnn_sport
    ";

    $em = $this->getDoctrine()->getManager();
    $stmt = $em->getConnection()->prepare($sql);
    $stmt->execute();
    return $stmt->fetchAll();
}   

141
2018-03-30 15:12



//$sql - sql statement
//$em - entity manager

$em->getConnection()->exec( $sql );

43
2018-02-10 05:45



Saya mendapatkannya bekerja dengan melakukan ini, dengan asumsi Anda menggunakan PDO.

//Place query here, let's say you want all the users that have blue as their favorite color
$sql = "SELECT name FROM user WHERE favorite_color = :color";

//set parameters 
//you may set as many parameters as you have on your query
$params['color'] = blue;


//create the prepared statement, by getting the doctrine connection
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->execute($params);
//I used FETCH_COLUMN because I only needed one Column.
return $stmt->fetchAll(PDO::FETCH_COLUMN);

Anda dapat mengubah FETCH_TYPE sesuai dengan kebutuhan Anda.


30
2017-11-26 02:38



Bagaimana mengeksekusi Query mentah dan mengembalikan data.

Kait ke manajer Anda dan buat koneksi baru:

$manager = $this->getDoctrine()->getManager();
$conn = $manager->getConnection();

Buat kueri Anda dan fetchAll:

$result= $conn->query('select foobar from mytable')->fetchAll();

Dapatkan data dari hasil seperti ini:

$this->appendStringToFile("first row foobar is: " . $result[0]['foobar']);

11
2018-02-14 17:45



Saya menemukan jawabannya mungkin:

A NativeQuery memungkinkan Anda mengeksekusi native   SQL, memetakan hasilnya menurut   spesifikasi Anda. Misalnya   spesifikasi yang menggambarkan bagaimana suatu   Kumpulan hasil SQL dipetakan ke Doktrin   hasil diwakili oleh   ResultSetMapping.

Sumber: Native SQL.


9
2017-07-25 09:09



Saya memiliki masalah yang sama. Anda ingin melihat objek koneksi yang disediakan oleh pengelola entitas:

$conn = $em->getConnection();

Anda kemudian dapat melakukan kueri / eksekusi langsung terhadapnya:

$statement = $conn->query('select foo from bar');
$num_rows_effected = $conn->exec('update bar set foo=1');

Lihat dokumen untuk objek koneksi di http://www.doctrine-project.org/api/dbal/2.0/doctrine/dbal/connection.html


4
2018-03-06 12:17



Anda tidak bisa, Ajaran 2 tidak memungkinkan untuk pertanyaan mentah. Sepertinya Anda bisa tetapi jika Anda mencoba sesuatu seperti ini:

$sql = "SELECT DATE_FORMAT(whatever.createdAt, '%Y-%m-%d') FORM whatever...";
$em = $this->getDoctrine()->getManager();
$em->getConnection()->exec($sql);

Doktrin akan meludahi kesalahan yang mengatakan bahwa DATE_FORMAT adalah fungsi yang tidak diketahui.

Tapi database saya (mysql) memang tahu fungsi itu, jadi pada dasarnya apa yang terjadi adalah Doktrin mengurai kueri di balik layar (dan di belakang punggung Anda) dan menemukan ekspresi yang tidak dipahami, mengingat kueri itu tidak valid.

Jadi jika seperti saya Anda ingin dapat mengirim string ke database dan membiarkannya mengatasinya (dan biarkan pengembang bertanggung jawab penuh atas keamanan), lupakan saja.

Tentu saja Anda bisa mengkodekan ekstensi untuk memungkinkan itu dalam beberapa cara atau lainnya, tetapi Anda juga menggunakan mysqli untuk melakukannya dan meninggalkan Doctrine ke bisnis ORM.


4
2017-09-27 15:28



Dalam model Anda membuat pernyataan SQL mentah (contoh di bawah ini adalah contoh interval tanggal yang harus saya gunakan, tetapi gantikan sendiri. Jika Anda melakukan SELECT add -> fetchall () ke panggilan execute ().

   $sql = "DELETE FROM tmp 
            WHERE lastedit + INTERVAL '5 minute' < NOW() ";

    $stmt = $this->getServiceLocator()
                 ->get('Doctrine\ORM\EntityManager')
                 ->getConnection()
                 ->prepare($sql);

    $stmt->execute();

3
2017-08-11 13:58