$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 ?
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 :Lien vers la documentation
Remplacez Eloquent ORM par la façade DB.