cari

Rumah  >  Soal Jawab  >  teks badan

Laravel fasih dengan cara menyertai pertanyaan

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中文网2811 hari yang lalu1393

membalas semua(6)saya akan balas

  • 習慣沉默

    習慣沉默2017-05-16 16:53:58

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

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 16:53:58

    $thread = Thread::with(['comments' => function ($query) {
        $query->whereNotNull('user');
    }, 'comments.user'])->first();

    balas
    0
  • 巴扎黑

    巴扎黑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.

    balas
    0
  • PHP中文网

    PHP中文网2017-05-16 16:53:58

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

    balas
    0
  • 巴扎黑

    巴扎黑2017-05-16 16:53:58

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

    balas
    0
  • 世界只因有你

    世界只因有你2017-05-16 16:53:58

    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 🎜

    balas
    0
  • Batalbalas