Laravel fasih dengan cara menyertai pertanyaan
PHP中文网
PHP中文网 2017-05-16 16:51:58
0
6
1390

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 查询就可以过滤掉不符合的数据.
LaravelEloquent 目前我只查到withkaedah

Keperluan ini boleh diselesaikan dengan mudah melalui YiiActiveRecord

$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

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(6)
習慣沉默

Penyertaan dalam pembina pertanyaan dalam laravel lalai kepada gelagat gabungan dalam, manual mengatakan demikian

给我你的怀抱
$thread = Thread::with(['comments' => function ($query) {
    $query->whereNotNull('user');
}, 'comments.user'])->first();
巴扎黑

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.

洪涛

\DB::('threads')
       ->where(['threads.id'=>$id])
       ->leftJoin("comments",'therads.id','=','comments.tid')
       ->paginate() 
巴扎黑

Tulis sahaja sertai dalam perhubungan, ->mempunyaiRamai()->sertai()->di mana() Anda boleh menulisnya mengikut kehendak anda.

世界只因有你

Sebenarnya, apa yang saya tanya adalah mengenai penggunaan ini adalah perkara biasa

Ini dilaksanakan dalam rel
Dan laravel pada masa ini saya hanya melihat satu dengan

rails里都是有实现的
laravel 目前我看到的只有一个with

rails里有 preloadincludesEager loadJoins, 可以来区别eager loading数据的方式.
这里有篇文章来讲解
http://www.mamicode.com/info-...

YiiActiveRecord也有with, joinWith(inner join, left join ....) innerJoinWith, 来根据需求做eager loading

其他的我就不查了. 并不是我要损laravel, 我是到现在也没有觉得laravelEloquentrel mempunyai pramuat, termasuk, Eager load, Sertai, anda boleh datang di sini Cara berbeza memuatkan data yang berbeza.
Berikut ialah artikel untuk menerangkan
http://www.mamicode.com/info-...

🎜Dan 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 🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan