我有以下型号:纸板,用户,UserPricingPlans,PricingPlanLimits雄辩关系优化查询
注:,如果有什么不对的车型code.They工作正常,不要介意。
纸板
class CardBoard extends Model{
public function user(){
return $this->belongsTo('Models\User','id_user');
}
}
用户
class User extends Model{
public function pricingPlans(){
return $this->hasMany('Models\UserPricingPlan','id_user');
}
}
PricingPlan
class PricingPlan extends Model{
public function limits(){
return $this->hasOne('Models\PricingPlanLimits','id_pricing_plan','id_pricing_plan');
}
}
PricingPlanLimits
我不会描述该模型,它不是必需的问题。但请记住,有一个属性叫做maxBoards。
的问题是,我只有纸板模型实例去努力,我想从PricingPlanLImits的maxBoard属性。所以我这样做:
注:我已经在这里CardBoard模型实例!上述
$maxBoard = $cardBoard->user->pricingPlans->last()->limits->maxBoard;
return $maxBoard;
的代码运行很好,但这种操作生成的查询次数为开销我。口才做选择为每个关系调用,我不希望所有这些数据和操作。
{
"query": "select * from `users` where `users`.`id_user` = ? limit 1",
"bindings": [
],
"time": 0.96
}
{
"query": "select * from `users_princing_plan` where `users_princing_plan`.`id_user` = ? and `users_princing_plan`.`id_user` is not null",
"bindings": [
],
"time": 0.8
}
{
"query": "select * from `pricing_plan_limits` where `pricing_plan_limits`.`id_pricing_plan` = ? and `pricing_plan_limits`.`id_pricing_plan` is not null limit 1",
"bindings": [
],
"time": 0.88
}
是不是有一种方法来优化这一点,并在一个雄辩的方式运行更少的查询?
你好!为什么你的SQL语句在0.96秒内执行? (它似乎太长)你有什么类型的数据库?你是否为你的专栏设置了索引? – YanDatsyuk
我已经取代原来的日志,不显示任何重要的东西。 这个查询需要0.64秒,数据库使用INNODB(MySQL)作为引擎,并在自制即兴本地服务器上运行,仅用于测试目的。 id_user是主键。 –
如果服务器在SSD上,查询时间会更快。 –