Rumah > rangka kerja php > ThinkPHP > teks badan

Cara menggunakan fungsi korelasi pertanyaan ThinkPHP

WBOY
Lepaskan: 2023-06-03 08:01:17
ke hadapan
1656 orang telah melayarinya

1. Persatuan model

1.1 Persatuan satu sama satu

Persatuan satu dengan satu ialah dua data Terdapat hanya satu rekod dalam setiap jadual Dalam kes ini, fungsi hasOne() dan belongTo() digunakan untuk mengaitkan. Katakan kita mempunyai dua jadual data, satu dipanggil jadual pengguna (jadual pengguna) dan satu lagi jadual maklumat pengguna (jadual info pengguna adalah seperti berikut:

user:
id
name

userinfo:
id
user_id
age
Salin selepas log masuk

Dua jadual di atas diwakili). mengikut medan user_id dikaitkan. Sekarang kita perlu menanyakan maklumat pengguna dan umur yang sepadan dalam jadual pengguna Langkah-langkahnya adalah seperti berikut:

Tentukan kaedah userinfo() dalam model Pengguna, dengan sebarang nama kaedah.

//User模型

<?php

class User extends Model{
public function userinfo(){
return $this -> hasOne(&#39;UserInfo&#39;, &#39;user_id&#39;);
}
}
Salin selepas log masuk

Tentukan kaedah umur() dalam model Pengguna Kaedah ini sebenarnya mentakrifkan atribut yang mengakses medan umur model info pengguna.

//User模型
<?php

class User extends Model{
protected $readonly = [&#39;age&#39;];

public function userinfo(){
return $this -> hasOne(&#39;UserInfo&#39;, &#39;user_id&#39;);
}

public function getAgeAttr($value, $data){
if(isset($data[&#39;userinfo&#39;])){
return $data[&#39;userinfo&#39;][&#39;age&#39;];
}
return &#39;&#39;;
}
}
Salin selepas log masuk

Selepas melengkapkan kod di atas, kami boleh menggunakan kaedah find() untuk menanyakan pengguna yang kami mahu dan umur mereka:

//查询user表中id为1的用户

$user = User::get(1);
echo $user -> name;
echo $user -> age;
Salin selepas log masuk

Nota: Dalam kod di atas, kami menggunakan $ The readonly atribut, atribut $readonly ialah atribut yang disediakan oleh ThinkPHP, yang boleh melindungi beberapa atribut daripada ditulis ke pangkalan data. Dalam kod di atas, kami menetapkan atribut umur sebagai atribut baca sahaja, supaya apabila $user -> age diakses, kaedah getAgeAttr akan dipanggil secara automatik untuk menanyakan medan umur dalam model info pengguna.

1.2 Perkaitan satu-ke-banyak

Perkaitan satu-ke-banyak bermakna satu daripada dua jadual data mempunyai berbilang rekod dan satu lagi hanya mempunyai satu rekod. Seperti dalam contoh berikut:

order:
id
user_id
order_no

order_goods:
id
order_id
name
price
Salin selepas log masuk

Dua jadual di atas berkaitan melalui id_perintah medan. Kami kini perlu mencari maklumat pesanan pengguna dan maklumat produk yang sepadan dalam jadual pengguna Operasi khusus adalah seperti berikut:

Tentukan kaedah pesanan() dalam model Pengguna pesanan.

//User模型

<?php
class User extends Model{
public function orders(){
return $this -> hasMany(&#39;Order&#39;, &#39;user_id&#39;);
}
}
Salin selepas log masuk

Tentukan kaedah barang() dalam model Pesanan Kaedah ini menunjukkan bahawa pesanan mempunyai berbilang produk.

//Order模型
<?php
class Order extends Model{
public function goods(){
return $this -> hasMany(&#39;OrderGoods&#39;, &#39;order_id&#39;);
}
}
Salin selepas log masuk

Selepas mentakrifkan perkaitan di atas, kami boleh menggunakan kaedah find() untuk menanyakan pesanan pengguna dan produk yang sepadan dengan setiap pesanan:

//查询user表中id为1的用户的订单信息和订单的商品信息

$user = User::get(1, &#39;orders.goods&#39;);
var_dump($user -> orders[0] -> goods);
Salin selepas log masuk

Parameter terakhir ('orders.goods ' ) bermaksud menanyakan semua Pesanan dan maklumat Barang berkaitan Pesanannya pada masa yang sama.

2. Perkaitan pertanyaan

2.1 Menggunakan pertanyaan perkaitan

Kami boleh mengakses atribut perkaitan yang ditakrifkan dalam lapisan model, Laksanakan pertanyaan berkaitan tanpa menentukan perhubungan pada peringkat lapisan model. Sebagai contoh, kami kini ingin menanyakan pengguna dan maklumat pesanannya:

$user = User::get(1);
$orders = $user -> orders;
echo $user -> name;
foreach($orders as $order){
echo $order -> order_no . "\n";
}
Salin selepas log masuk

2.2 Persatuan Tertunda

Jika kami tidak mahu menanyakan perkaitannya secara automatik semasa membuat pertanyaan model Perhubungan, anda boleh menggunakan korelasi tertunda untuk mencapai keperluan ini. Contohnya:

$user = User::with(&#39;orders&#39;)->get(1);
Salin selepas log masuk

Dalam kod di atas, apabila kami menetapkan pembolehubah $user, kami menentukan perkaitan yang akan diperolehi dalam fungsi with() Pada masa ini, pernyataan pertanyaan tidak akan menanyakan perkaitan secara automatik secara lalai, tetapi akan menunggu kami Pertanyaan hanya akan dilakukan apabila menggunakan perhubungan perkaitan.

2.3 Mengandungi perkaitan

Selain perkaitan tertunda di atas, kami juga boleh memasukkan semua perkaitan secara automatik dengan menetapkan parameter sebenar selepas kaedah dengan untuk mencapai keperluan pertanyaan kami . Contohnya:

$user = User::with(&#39;orders&#39;)->find(1, true);
Salin selepas log masuk

Dalam kod di atas, kami menambahkan parameter benar pada kaedah find() Parameter ini menunjukkan bahawa kami ingin memasukkan semua perkaitan model pengguna.

Atas ialah kandungan terperinci Cara menggunakan fungsi korelasi pertanyaan ThinkPHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!