recherche

Maison  >  Questions et réponses  >  le corps du texte

lumen - requête de relation laravel, il y aura un grand nombre de requêtes, comment la résoudre ?

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

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

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

Le code ci-dessus contient 13 requêtes de base de données. Bien que chaque requête sur cette machine soit très rapide, elle ne peut pas gérer un grand nombre de requêtes.

Les données de base sont les suivantes :

{
    "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
},
// 。。。。

Si la base de données passe de la machine locale vers l'intranet, les données d'exécution de chaque SQL doubleront essentiellement.

Les données sont les suivantes :

{
    "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
},
// 。。。。

Je me demande comment tout le monde gère ce genre de question relationnelle ? Écrivez-vous le vôtre JOIN pour vérifier le code ? Ou existe-t-il un autre moyen de résoudre ce problème ?

为情所困为情所困2771 Il y a quelques jours479

répondre à tous(3)je répondrai

  • ringa_lee

    ringa_lee2017-05-16 16:54:17

    L'efficacité de l'ORM est relativement lente. Si vous recherchez les meilleures performances, vous pouvez aussi bien essayer d'utiliser directement la classe DB

    .

    répondre
    0
  • 大家讲道理

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

    Il ne devrait pas être nécessaire d'écrire du SQL natif après modification$data->getInfoImage()->getListImage()->getPrice($locale);J'ai regardé la documentation et j'ai constaté que les conditions supplémentaires pour spécifier les requêtes préchargées en relation sont similaires à celles-ci :

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

    Lien vers la documentation

    répondre
    0
  • 天蓬老师

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

    Remplacez Eloquent ORM par la façade DB.

    répondre
    0
  • Annulerrépondre