cari

Rumah  >  Soal Jawab  >  teks badan

Lumen - pertanyaan hubungan laravel, akan ada sejumlah besar pertanyaan, bagaimana untuk menyelesaikannya?

        $data = Model\Recipe::with(['ingredient', 'tags'])->find($recipeId);

        if (empty($data)) {
            return ResponseData::set($data);
        }

        $data->getInfoImage()->getListImage()->getPrice($locale);
        return ResponseData::set($data);

Kod di atas mengandungi 13 pertanyaan pangkalan data. Walaupun setiap pertanyaan pada mesin ini sangat pantas, ia tidak dapat mengendalikan bilangan pertanyaan yang banyak.

Data asas adalah seperti berikut:

{
    "SQL":"select * from `ak_recipe` where `ak_recipe`.`id` = ? and `ak_recipe`.`deleted_at` is null limit 1",
    "bindings":[
        "148"
    ],
    "time":0.00037
},
{
    "SQL":"select * from `ak_recipe_image` where `type` = ? and `recipe_id` = ? and `ak_recipe_image`.`deleted_at` is null limit 1",
    "bindings":[
        2,
        148
    ],
    "time":0.00046
},
{
    "SQL":"select * from `ak_recipe_image` where `type` = ? and `recipe_id` = ? and `ak_recipe_image`.`deleted_at` is null limit 1",
    "bindings":[
        1,
        148
    ],
    "time":0.00035
},
// 。。。。

Jika pangkalan data ditukar daripada mesin tempatan ke intranet, data pelaksanaan setiap SQL pada asasnya akan berganda.

Data adalah seperti berikut:

{
    "SQL":"select * from `ak_recipe` where `ak_recipe`.`id` = ? and `ak_recipe`.`deleted_at` is null limit 1",
    "bindings":[
        "148"
    ],
    "time":0.00073
},
{
    "SQL":"select * from `ak_recipe_image` where `type` = ? and `recipe_id` = ? and `ak_recipe_image`.`deleted_at` is null limit 1",
    "bindings":[
        2,
        148
    ],
    "time":0.00075
},
{
    "SQL":"select * from `ak_recipe_image` where `type` = ? and `recipe_id` = ? and `ak_recipe_image`.`deleted_at` is null limit 1",
    "bindings":[
        1,
        148
    ],
    "time":0.00077
},
// 。。。。

Saya tertanya-tanya bagaimana semua orang mengendalikan pertanyaan perhubungan seperti ini? Adakah anda menulis sendiri JOIN untuk menyemak kod? Atau adakah cara lain untuk menyelesaikan masalah ini?

为情所困为情所困2771 hari yang lalu477

membalas semua(3)saya akan balas

  • ringa_lee

    ringa_lee2017-05-16 16:54:17

    Kecekapan ORM agak perlahan Jika anda mencari prestasi terbaik, anda juga boleh mencuba menggunakan kelas DB secara terus

    balas
    0
  • 大家讲道理

    大家讲道理2017-05-16 16:54:17

    Sepatutnya tidak ada keperluan untuk menulis SQL asli Selepas pengubahsuaian$data->getInfoImage()->getListImage()->getPrice($locale);Saya melihat dokumentasi dan mendapati bahawa syarat tambahan untuk menentukan pertanyaan pramuat berkaitan adalah serupa dengan ini:

    .
    $users = App\User::with(['posts' => function ($query) {
        $query->where('title', 'like', '%first%');
    
    }])->get();
    

    Pautan dokumentasi

    balas
    0
  • 天蓬老师

    天蓬老师2017-05-16 16:54:17

    Ganti ORM Fasih dengan fasad DB.

    balas
    0
  • Batalbalas