apache和yii域名配置(yii框架数据库关联查询操作示例)
类别:编程学习 浏览量:1817
时间:2021-09-30 00:34:29 apache和yii域名配置
yii框架数据库关联查询操作示例本文实例讲述了yii框架数据库关联查询操作。分享给大家供大家参考,具体如下:
|
<?php namespace app\controllers; use yii\web\Controller; use app\models\Customer; class CustomerController extends Controller{ //根据顾客名字查询出所有的订单信息 public function actionIndex(){ $customer = Customer::find()->where([ 'name' => 'zhangsan' ])->one(); $orders = $customer ->hasMany( 'app\models\Order' ,[ 'customer_id' => 'id' ])->asArray()->all(); print_r( $orders ); } } ?> |
上边的控制器方法查询,Customer模型没有具体方法。
上边的 app\models\Order 可以改进为Order::className()
,并且上边要添加use app\models\Order;
方式二:(使用model方法)
customer模型代码:
|
<?php namespace app\models; use yii\db\ActiveRecord; class Customer extends ActiveRecord{ public function getOrders(){ return $this ->hasMany(Order::className(),[ 'customer_id' => 'id' ])->asArray()->all(); } } |
控制器代码:
|
namespace app\controllers; use yii\web\Controller; use app\models\Customer; class CustomerController extends Controller{ //根据顾客名字查询出所有的订单信息 public function actionIndex(){ $customer = Customer::find()->where([ 'name' => 'zhangsan' ])->one(); $orders = $customer ->getOrders(); print_r( $orders ); } } |
方法三:(调用模型的属性查询)
customer模型代码:
|
namespace app\models; use yii\db\ActiveRecord; class Customer extends ActiveRecord{ public function getOrders(){ return $this ->hasMany(Order::className(),[ 'customer_id' => 'id' ])->asArray(); } } |
控制器代码:
|
namespace app\controllers; use yii\web\Controller; use app\models\Customer; 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 app\models; use yii\db\ActiveRecord; class Order extends ActiveRecord{ //根据订单id获取顾客信息 public function getCustomer(){ return $this ->hasOne(Customer::className(),[ 'id' => 'customer_id' ])->asArray(); } } |
控制器代码:
|
namespace app\controllers; use yii\web\Controller; use app\models\Order; 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; } |
总共查询两次。
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
原文链接:https://www.cnblogs.com/gyfluck/p/9104295.html
您可能感兴趣
- 在php中与数据库连接的技术(PHP7.0连接DB操作实例分析基于mysqli)
- 怎么用docker中的mysql连接数据库(连接docker里面的mysql失败解决方法)
- 查询SQL SERVER中某个数据库的每个表的数据量和每行记录所占用空间
- sql server支持两种登录验证方式(远程登陆SQL Server 2014数据库的方法)
- 数据库大数据访问的解决方法
- sqlserver 开启数据库(SQLSERVER简单创建DBLINK操作远程服务器数据库的方法)
- mysql数据类型图解(MySQL数据库主从技术GTID大揭秘)
- sqlserver数据类型和长度(SqlServer 数据库 三大 范式)
- 数据库sql位置更换磁盘(SQL SERVER迁移之更换磁盘文件夹的完整步骤)
- sqlserver 高级查询(SQL Server2019数据库之简单子查询的具有方法)
- laravel数据库管理教程(Laravel基础_关于view共享数据的示例讲解)
- docker资源隔离的实现方式(docker配置openGauss数据库的方法详解)
- laravel框架配置(Laravel框架实现多数据库连接操作详解)
- sqlserver表值函数用法(SQL Server数据库中的表名称、字段比较)
- mysql清空数据库所有表格(MySQL用truncate命令快速清空一个数据库中的所有表)
- sqlserver两表查询语句格式(sql server实现在多个数据库间快速查询某个表信息的方法)
- 文明6金币太少怎么办 文明6无限刷钱教程(文明6金币太少怎么办)
- 开国中将,王牌军63军首任政委,两个连襟一个上将一个少将传为佳话(王牌军63军首任政委)
- 臭名昭著的731部队最高负责人 石井四郎(臭名昭著的731部队最高负责人)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
- 被鉴定的古董价值300万 当心,你可能遇到诈骗了(被鉴定的古董价值300万)
- 英语难学吗(初中英语难学吗)
热门推荐
- dedecms标签怎么调用(Dedecms自定义表单“数据校验不对,程序返回错误”的解决方法)
- dedecms屏蔽规则(使用Dedecms中七个容易忽略的安全细节介绍)
- docker安装教程图解(Docker在线、离线安装及其常用命令操作)
- css边框样式讲解(纯css实现动态边框的示例代码)
- qgis 如何平滑折线(Sqlview动态发布地图图层的方法)
- mysql索引详解及基本用法(Mysql普通索引与唯一索引的选择详析)
- vue可以使用模态框modal吗(vue基于Teleport实现Modal组件)
- dedecms列表分页代码(Dedecms文章设置推荐后列表页标题自动加粗的解决方法)
- Extjs中文乱码
- mysql创建表的基本步骤(mysql中操作表常用的sql总结)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9