yii2数据库关联查询有哪些方法?
发布时间:2022-03-12 13:53:31 所属栏目:语言 来源:互联网
导读:这篇文章主要给大家分享yii2框架数据库关联查询的操作,对大家学习yii2框架具有一定的借鉴价值,感兴趣的朋友可以参考一下,希望大家阅读完这篇文章能有所收获,下面我们一起来学习一下吧。 ?php namespace appcontrollers; use yiiwebController; use ap
这篇文章主要给大家分享yii2框架数据库关联查询的操作,对大家学习yii2框架具有一定的借鉴价值,感兴趣的朋友可以参考一下,希望大家阅读完这篇文章能有所收获,下面我们一起来学习一下吧。 <?php namespace appcontrollers; use yiiwebController; use appmodelsCustomer; class CustomerController extends Controller{ //根据顾客名字查询出所有的订单信息 public function actionIndex(){ $customer = Customer::find()->where(['name'=>'zhangsan'])->one(); $orders = $customer->hasMany('appmodelsOrder',['customer_id'=>'id'])->asArray()->all(); print_r($orders); } } ?> 上边的控制器方法查询,Customer模型没有具体方法。 上边的 appmodelsOrder 可以改进为Order::className(),并且上边要添加use appmodelsOrder; 方式二:(使用model方法) customer模型代码: <?php namespace appmodels; use yiidbActiveRecord; class Customer extends ActiveRecord{ public function getOrders(){ return $this->hasMany(Order::className(),['customer_id'=>'id'])->asArray()->all(); } } 控制器代码: namespace appcontrollers; use yiiwebController; use appmodelsCustomer; class CustomerController extends Controller{ //根据顾客名字查询出所有的订单信息 public function actionIndex(){ $customer = Customer::find()->where(['name'=>'zhangsan'])->one(); $orders = $customer->getOrders(); print_r($orders); } } 方法三:(调用模型的属性查询) customer模型代码: namespace appmodels; use yiidbActiveRecord; class Customer extends ActiveRecord{ public function getOrders(){ return $this->hasMany(Order::className(),['customer_id'=>'id'])->asArray(); } } 控制器代码: namespace appcontrollers; use yiiwebController; use appmodelsCustomer; class CustomerController extends Controller{ //根据顾客名字查询出所有的订单信息 public function actionIndex(){ $customer = Customer::find()->where(['name'=>'zhangsan'])->one(); $orders = $customer->orders; //说明,当调用一个不存在的属性时, //php会去调用一个__get()的方法, //__get()的方法会自动调用一个get+属性的方法,即getOrders() //并且会再查询时自动补上->all()或->one()方法,根据模型查询的hasMany或hasOne决定的 print_r($orders); } } 根据订单id获取对应的顾客信息: 模型代码: namespace appmodels; use yiidbActiveRecord; class Order extends ActiveRecord{ //根据订单id获取顾客信息 public function getCustomer(){ return $this->hasOne(Customer::className(),['id'=>'customer_id'])->asArray(); } } 控制器代码: namespace appcontrollers; use yiiwebController; use appmodelsOrder; class CustomerController extends Controller{ //根据订单查询用户信息 public function actionIndex(){ $orders = Order::find()->where(['id'=>2])->one(); $customer = $orders->customer; print_r($customer); } } 以上代码中的$orders->customer会记录缓存,如果要删除缓存,可以使用unset($orders->customer)。 关联查询的多次查询 $customers = Customer::find()->all(); foreach($customers as $customer){ $orders = $customer->orders; } 这样如果有100条数据,就总共需要查询101次。 优化: $customers = Customer::find()->with('orders')->all(); foreach($customers as $customer){ $orders = $customer->orders; } (编辑:平顶山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |