PHP开发框架Yii Framework教程(25) 数据库-Query Builder示例

上一篇介绍PHP使用DAO(数据库访问对象接口)访问数据库的方法,使用DAO需要程序员编写SQL语句,对于一些复杂的SQL语 句,Yii提供了Query Builder来帮助程序员生成SQL语句,Query Builder提供了一中面向对象的方法动态创建SQL语句,打个不 十分恰当的比较,PHP 的DAO和.Net 的DAO接口非常类型,Query builder 就有点像LINQ了,尽管和LINQ比起来功能小很多。对 于一些简单的SQL查询,通常不需要借助于Query Builder,比如上篇中的查询Employee表格。

和直接使用SQL语句相比, 使用Query Builder具有下面好处:

支持通过程序动态创建比较复杂的SQL查询.

自动为创建的SQL语句中的表名,列表 添加引号以避免和SQL保留的标志符产生冲突.

指定为参数添加引号并尽可能的使用参数绑定以减小SQL Injection的风 险。.

使用Query Builder不直接编写SQL语句,而提供了一定程度上的数据库抽象,从而为切换数据库类型提供了便利。

本例查询Chinook的两个表Customer和Employee, 查询EmployeeId=4管理的所有客户的联系信息。

如果使用SQL查 询,可以写作:

SELECT c.FirstName, c.LastName , c.Address,c.Email
FROM customer c
INNER JOIN
employee e
ON c.SupportRepId=e.EmployeeId
WHERE e.EmployeeId=4

本例使用Query Builder创建SQL查询,修改SiteController的indexAction方法:

public function actionIndex()
{     

    $model = array();
    $connection=Yii::app()->db;
    $command=$connection->createCommand()
        ->select('c.FirstName, c.LastName, c.Address,c.Email')
        ->from('customer c')
        ->join('employee e','c.SupportRepId=e.EmployeeId')
        ->where('e.EmployeeId=4');     

    $dataReader=$command->query();     

    // each $row is an array representing a row of data
    foreach($dataReader as $row)
    {
        $customer= new DataModel();     

        $customer->firstName=$row['FirstName'];
        $customer->lastName=$row['LastName'];     

        $customer->address=$row['Address'];
        $customer->email=$row['Email'];     

        $model[]=$customer;
    }     

    $this->render('index', array(
        'model' => $model,     

        ));
}

可以看到Query Builder也是使用 CDbCommand , CDbCommand提供了如下查询数据的方法:

select()

selectDistinct()

from()

where()

join()

leftJoin()

rightJoin()

crossJoin()

naturalJoin()

group()

having()

order()

limit()

offset()

union()

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sql
, c++builder
, 查询
, query
, 语句
, builder
, employeeID
, php编写app接口
, Yii联合查询
, leftJoin
, join框架
, Yii查询
yii数据库查询
yii query builder、yii2 querybuilder、mysql示例数据库下载、mysql示例数据库、oracle 示例数据库 hr,以便于您获取更多的相关知识。

时间: 2024-08-29 06:22:59

PHP开发框架Yii Framework教程(25) 数据库-Query Builder示例的相关文章

PHP开发框架Yii Framework教程(26) 数据库-Active Record示例

使用Java或是.Net 写数据库应用,很多人都用过Hibernate(或NHibernate)可以大大简化数据库编程,而以对象的方式来 读写数据库(ORM),Yii提供的Active Record (AR) 也是一个流行的 对象-关系映射 (ORM) 技术.每个 AR 类代表一个数据表 (或视图),数据表(或视图)的列在 AR 类中体现为类的属性,一个 AR 实例则表示表中的一行. 常见的 CRUD 操作作为 AR 的方法实现.因此,我们可以以一种更加面向对象的方式访问数据. 这里修改Yii

PHP开发框架Yii Framework教程(27) 数据库-关联Active Record示例

我们已经了解了怎样使用 Active Record (AR) 从单个数据表中获取数据. 在本节中,我们讲解怎样使用 AR 连接多个相关 数据表并取回关联(join)后的数据集. 为了使用关系型 AR,我们建议在需要关联的表中定义主键-外键约束.这些约 束可以帮助保证相关数据的一致性和完整性. 本例通过修改Yii Framework 开发教程(25) 数据库-Query Builder示例来 介绍多个有关系的表如何使用Active Record. 在我们使用 AR 执行关联查询之前,我们需要让 A

PHP开发框架Yii Framework教程(34) Zii组件-AutoComplete示例

CJuiAutoComplete 在用户输入时可以根据用户输入的前几个字符自动提示用户可以输入的文字.它封装了 JUI autocomplete插件. 基本用法如下 <?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array( 'name'=>'city', 'source'=>$data, // additional javascript options for the autocomplete plugin 'op

PHP开发框架Yii Framework教程(46) Zii组件-Sortable示例

CJuiSortable显示一个列表,列表中的列表项可以通过拖放重新调整顺序,它封装了 JUI Sortable插件. 其基本用 法如下: <?php Yii::app()->clientScript->registerCss('sortable', " #sortable {list-style-type: none; margin: 0; padding: 0; width: 60%;} #sortable li {margin: 2px; padding: 4px; bo

PHP开发框架Yii Framework教程(45) Zii组件-Selectable示例

CJuiSelectable可以显示一个列表,列表的每个项支持Select事件,它封装了 JUI Selectable插件,其基本用法如下: <?php Yii::app()->clientScript->registerCss('selectable'," #selectable {list-style-type: none; margin: 0; padding: 0; width: 60%;} #selectable li {margin: 2px; padding: 4

PHP开发框架Yii Framework教程(44) Zii组件-Resizable示例

CJuiResizable可以使包含在其中的UI组件支持缩放功能,它封装了 JUI Resizable插件, CJuiResizable基本使用方 法如下: <?php $this->beginWidget('zii.widgets.jui.CJuiResizable', array( 'options'=>array( 'minWidth'=>50, 'minHeight'=>50, 'maxWidth'=>500, 'maxHeight'=>500, ), '

PHP开发框架Yii Framework教程(43) Zii组件-Droppable示例

上篇介绍如果使用UI组件支持拖放,CJuiDroppable表示某个区域可以接受拖拉过来的UI组件,它封装了 JUI Droppable插件 . 我们修改上例,添加一个Droppable区域,当有UI组件拖放到该区域时,显示"Dropped". <?php $this->beginWidget('zii.widgets.jui.CJuiDroppable', array( 'options'=>array( 'drop'=>'js:function(event,

PHP开发框架Yii Framework教程(42) Zii组件-Draggable示例

CJuiDraggable可以使包含着其中的其它UI组件实现拖放功能,它封装了 JUI Draggable插件. 要使某个UI组件可以 拖放,下面为使用CJuiDraggable的基本用法: <?php $this->beginWidget ('zii.widgets.jui.CJuiDraggable', array( 'options'=>array( 'cursor'=>'move', ), 'htmlOptions'=>array( 'style'=>'widt

PHP开发框架Yii Framework教程(40) Zii组件-SliderInput示例

CJuiSliderInput 显示一滑动条,它也封装了 JUI slider插件,可以用在Form中作为用户输入UI组件. 基本用法如 下: <center class="form"> <?php $form=$this->beginWidget('CActiveForm'); ?> <?php echo $form->errorSummary($model); ?> <?php $this->widget('zii.wid