lumen - requête de relation laravel, il y aura un grand nombre de requêtes, comment la résoudre ?
为情所困
为情所困 2017-05-16 16:52:17
0
3
473
        $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 ?

为情所困
为情所困

répondre à tous(3)
左手右手慢动作

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

.
大家讲道理

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

Peter_Zhu

Remplacez Eloquent ORM par la façade DB.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal