Rumah  >  Artikel  >  rangka kerja php  >  Pertanyaan data dalam rangka kerja Yii: capai data dengan cekap

Pertanyaan data dalam rangka kerja Yii: capai data dengan cekap

王林
王林asal
2023-06-21 11:22:391250semak imbas

Rangka kerja Yii ialah rangka kerja aplikasi web PHP sumber terbuka yang menyediakan pelbagai alatan dan komponen untuk memudahkan proses pembangunan aplikasi web, yang mana pertanyaan data merupakan salah satu komponen penting. Dalam rangka kerja Yii, kita boleh menggunakan sintaks seperti SQL untuk mengakses pangkalan data untuk membuat pertanyaan dan memanipulasi data dengan cekap.

Pembina pertanyaan rangka kerja Yii terutamanya termasuk jenis berikut: Pertanyaan Rekod Aktif, pertanyaan Pembina Pertanyaan, pertanyaan arahan dan pertanyaan SQL asal. Artikel ini akan memperkenalkan pembina pertanyaan ini dan cara menggunakannya satu demi satu untuk membantu pemula menguasai cara menggunakan pertanyaan data dalam rangka kerja Yii dengan lebih baik.

  1. Pertanyaan Rekod Aktif

Mod Rekod Aktif ialah salah satu mod akses data yang paling biasa digunakan dalam rangka kerja Yii Ia menyediakan antara muka berorientasikan objek yang membolehkan kami lakukan perkara seperti Memanipulasi data dalam pangkalan data seperti yang anda lakukan dengan kejadian berorientasikan objek. Dalam rangka kerja Yii, setiap kelas Active Record sepadan dengan jadual pangkalan data, dan kita boleh mengakses data dalam jadual dengan memanggil kaedah statik kelas.

Berikut ialah contoh pertanyaan Rekod Aktif:

//创建一个Active Record对象
$post = Post::findOne(1);

//输出该对象的属性
echo $post->title;

Dalam contoh ini, kami mula-mula menggunakan kaedah findOne() untuk mencipta contoh kelas Post Kaedah ini akan membuat pertanyaan pangkalan data PostRekod dengan kunci utama 1 dalam jadual dan kembalikan objek Rekod Aktif, kemudian kami menggunakan atribut title objek untuk mengakses atribut tajuk rekod.

Dalam pembangunan sebenar, kita biasanya perlu menapis, mengisih, halaman dan operasi lain pada data. Rangka kerja Yii menyediakan kaedah yang kaya untuk melaksanakan fungsi ini. Sebagai contoh, kita boleh menggunakan kaedah where() untuk menambah keadaan penapis, menggunakan kaedah orderBy() untuk menentukan kaedah pengisihan, menggunakan kaedah limit() untuk mengehadkan bilangan rekod yang dikembalikan dan menggunakan kaedah offset() untuk nyatakan kedudukan permulaan rekod yang dikembalikan. Berikut ialah contoh:

//查询标题包含“Yii”并且作者为“admin”的文章,并按照发布时间倒序排序,返回前10条记录
$posts = Post::find()->where(['like', 'title', 'Yii'])
                      ->andWhere(['author' => 'admin'])
                      ->orderBy(['created_at' => SORT_DESC])
                      ->limit(10)
                      ->offset(0)
                      ->all();

Dalam contoh ini, kami menggunakan kaedah find() untuk mencipta objek pertanyaan Rekod Aktif, dan kemudian menggunakan kaedah where() dan andWhere() untuk menambah dua syarat penapis, iaitu Tajuk mengandungi "Yii" dan pengarangnya ialah "admin"; kaedah orderBy() digunakan untuk menentukan titik permulaan rekod yang dikembalikan Kedudukan permulaan ialah 0 rekod. Akhir sekali, kami menggunakan kaedah limit() untuk melaksanakan pertanyaan dan mengembalikan semua rekod yang memenuhi keperluan. offset()all()

Query BuilderQuery
  1. Query Builder ialah satu lagi kaedah capaian data yang biasa digunakan dalam rangka kerja Yii Ia menyediakan kaedah panggilan berantai untuk membina pernyataan pertanyaan SQL , lebih sesuai untuk keperluan pertanyaan yang kompleks. Dalam rangka kerja Yii, kita boleh menggunakan kaedah
untuk mencipta objek Pembina Pertanyaan, dan kemudian menggunakan satu siri kaedah pada objek untuk membina pernyataan pertanyaan.

Yii::$app->db->createCommand()Berikut ialah contoh pertanyaan Pembina Pertanyaan:

//创建一个查询构建器对象,并构建查询语句
$query = Yii::$app->db->createCommand()
        ->select('id, title, content')
        ->from('post')
        ->where(['like', 'title', 'Yii'])
        ->andWhere(['author' => 'admin'])
        ->orderBy(['created_at' => SORT_DESC])
        ->limit(10)
        ->offset(0);

//执行查询,并返回结果集
$posts = $query->queryAll();

Dalam contoh ini, kita mula-mula mencipta objek Pembina Pertanyaan menggunakan kaedah

dan kemudian gunakan objek

, Yii::$app->db->createCommand(), select(), from(), where(), andWhere() dan orderBy() dan kaedah lain untuk membina pernyataan pertanyaan. Akhir sekali, kami menggunakan kaedah limit() untuk melaksanakan pertanyaan dan mengembalikan semua rekod yang memenuhi keperluan. offset()queryAll()Perbezaan terbesar antara Pembina Pertanyaan dan Rekod Aktif ialah Pembina Pertanyaan tidak perlu menentukan kelas model, jadi ia sesuai untuk beberapa senario pertanyaan mudah, seperti pertanyaan statistik.

Pertanyaan arahan
  1. Pertanyaan arahan ialah kaedah capaian data paling asli dalam rangka kerja Yii Kita boleh menggunakan kaedah ini untuk melaksanakan beberapa operasi pangkalan data yang tidak memerlukan pengembalian a set hasil Seperti kemas kini, padam, masukkan, dsb. Dalam rangka kerja Yii, kita boleh menggunakan kaedah
untuk mencipta objek Perintah, dan kemudian menggunakan kaedah

objek untuk melaksanakan pernyataan SQL. Yii::$app->db->createCommand()execute()Berikut ialah contoh pertanyaan arahan:

//创建一个命令对象,并执行SQL语句
Yii::$app->db->createCommand()
        ->update('post', ['status' => 1], 'author = "admin"')
        ->execute();

Dalam contoh ini, kita mula-mula mencipta objek Perintah menggunakan kaedah

dan kemudian menggunakan kaedah

bagi objek untuk membina pernyataan Kemas Kini, yang mengemas kini atribut status semua rekod dalam jadual Yii::$app->db->createCommand() yang update() ialah "admin" kepada 1, akhirnya kami menggunakan kaedah post untuk melaksanakan pernyataan kemas kini. authorexecute()

Pertanyaan SQL Asal
  1. Dalam beberapa kes khas, kami mungkin perlu melaksanakan beberapa pernyataan pertanyaan kompleks yang tidak boleh diproses melalui Rekod Aktif, Pembina Pertanyaan atau pertanyaan arahan Pertanyaan SQL boleh digunakan pada masa ini. Dalam rangka kerja Yii, kita boleh menggunakan kaedah
untuk mencipta objek Perintah, kemudian gunakan kaedah

objek untuk menentukan pernyataan SQL asal, dan menggunakan kaedah Yii::$app->db->createCommand() untuk melaksanakan pertanyaan. setSql()queryAll()Berikut ialah contoh pertanyaan SQL mentah:

//创建一个命令对象,并执行原始SQL查询
$connection = Yii::$app->db;
$command = $connection->createCommand("
    SELECT p.id, p.title, u.username
    FROM post p LEFT JOIN user u ON p.author_id = u.id
    WHERE p.status = 1 AND u.role = 'admin'
    ORDER BY p.created_at DESC
    LIMIT 10 OFFSET 0
");
$posts = $command->queryAll();

这个例子中,我们首先创建了一个Command对象,并使用setSql()方法指定一条原始的SQL查询语句。该语句将post表和user表进行左连接,查询出所有状态为1且用户角色为“admin”的文章,并按照发布时间倒序排序,返回前10条记录。最后,我们使用queryAll()方法执行该查询,并返回所有符合要求的记录。

总结:

在Yii框架中,我们可以使用多种方式来访问数据库中的数据,包括Active Record查询、Query Builder查询、命令查询和原始SQL查询。不同的查询构建器适用于不同的查询场景,我们需要根据实际需求来选择最合适的查询方式。通过本文的介绍,相信读者已经对Yii框架中的数据查询有了更深入的了解,希望对大家在实际开发中使用Yii框架有所帮助。

Atas ialah kandungan terperinci Pertanyaan data dalam rangka kerja Yii: capai data dengan cekap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn