Rumah > Soal Jawab > teks badan
Andaian
Sehelaithread
(帖子) 预加载 comments
(评论)和 comments.user
(pengguna yang komen)
Biasanya anda boleh mendapatkannya dengan hanya satu baris kod
$thread = Thread::with('comments', 'comments.user')->first();
Tiada masalah dengan ini, dan ia boleh disoal dan dipaparkan dengan baik.
$comment = $thread->comments[0]; // Comment Model
$user = $comment->user; // User Model
Tetapi permintaan semasa ialah: jika data pengguna yang telah mengulas dipadamkan, data ulasan yang berkaitan secara semula jadi tidak boleh dipaparkan, jika tidak, maklumat tersebut akan menjadi tidak lengkap (adakah ini permintaan biasa, bukan?)
Maka secara logiknya, hanya ada inner join
查询就可以过滤掉不符合的数据.Laravel
的Eloquent
目前我只查到with
kaedah
Keperluan ini boleh diselesaikan dengan mudah melalui Yii
的ActiveRecord
$thread = Thread::find()->innerJoinWith(['comments', 'comments.user'])->one();
Saya tidak begitu mengenalinya, jadi saya ingin bertanya kepada pakar dalam bidang ini bagaimana untuk menyelesaikannya!Laravel
習慣沉默2017-05-16 16:53:58
Penyertaan dalam pembina pertanyaan dalam laravel lalai kepada gelagat gabungan dalam, manual mengatakan demikian
给我你的怀抱2017-05-16 16:53:58
$thread = Thread::with(['comments' => function ($query) {
$query->whereNotNull('user');
}, 'comments.user'])->first();
巴扎黑2017-05-16 16:53:58
ORM yang fasih tidak mempunyai syarat pertanyaan penyertaan langsung, tetapi terdapat penyelesaian, seperti yang dinyatakan di atas.
Tetapi saya biasanya tidak menggunakan ORM kerana sebab prestasi. Saya menggunakan Query Builder.
PHP中文网2017-05-16 16:53:58
\DB::('threads')
->where(['threads.id'=>$id])
->leftJoin("comments",'therads.id','=','comments.tid')
->paginate()
巴扎黑2017-05-16 16:53:58
Tulis sahaja sertai dalam perhubungan, ->mempunyaiRamai()->sertai()->di mana() Anda boleh menulisnya mengikut kehendak anda.
世界只因有你2017-05-16 16:53:58
Sebenarnya, apa yang saya tanya adalah mengenai penggunaan ini adalah perkara biasa
Ini dilaksanakan dalamrel
laravel
pada masa ini saya hanya melihat satu dengan
rails
里都是有实现的
而laravel
目前我看到的只有一个with
rails
里有 preload
、includes
、Eager load
、Joins
, 可以来区别eager loading
数据的方式.
这里有篇文章来讲解
http://www.mamicode.com/info-...
而Yii
的ActiveRecord
也有with
, joinWith
(inner join, left join ....) innerJoinWith
, 来根据需求做eager loading
其他的我就不查了. 并不是我要损laravel
, 我是到现在也没有觉得laravel
的Eloquent
pramuat
, termasuk
, Eager load
, Sertai
, anda boleh datang di sini Cara berbeza
Berikut ialah artikel untuk menerangkan
http://www.mamicode.com/info-...
Yii
's ActiveRecord
juga mempunyai with
, joinWith
(gabungan dalam, sertai kiri....) innerJoinWith
, untuk melakukan memuat dengan sabar
mengikut keperluan🎜
🎜Saya tidak akan menyemak perkara lain Bukannya saya mahu merosakkan laravel
, tetapi saya masih tidak fikir laravel
's Eloquent
. sangat berkuasa 🎜