Rumah > Artikel > rangka kerja php > Pertanyaan data dalam rangka kerja Yii: capai data dengan cekap
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.
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 Post
Rekod 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()
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.
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. author
execute()
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!