YII2.0 AcriveRecord的简单使用

这篇文章我们来看看在 Yii2 之中的 Active Record,为啥要将 Active Record 单独出来说呢?因为个人认为这是 Yii(不管是 Yii1.1 还是 Yii2)最强大的一部分功能之一,何况又遇上在 Yii2 中其实对 Active Record的改进还是比较多的,所以我们就通过这篇文章来瞅瞅 Yii2 的 Active Record 新特性。

1、支持更多的数据库


下面是所有目前被 Yii 的 AR 功能所支持的数据库列表:

  • MySQL 4.1 及以上:通过 [[yii\db\ActiveRecord]]
  • PostgreSQL 7.3 及以上:通过 [[yii\db\ActiveRecord]]
  • SQLite 2 和 3:通过 [[yii\db\ActiveRecord]]
  • Microsoft SQL Server 2010 及以上:通过 [[yii\db\ActiveRecord]]
  • Oracle: 通过 [[yii\db\ActiveRecord]]
  • CUBRID 9.1 及以上:通过 [[yii\db\ActiveRecord]]
  • Sphinx:通过 [[yii\sphinx\ActiveRecord]],需求 yii2-sphinx 扩展
  • ElasticSearch:通过 [[yii\elasticsearch\ActiveRecord]],需求 yii2-elasticsearch 扩展
  • Redis 2.6.12 及以上:通过 [[yii\redis\ActiveRecord]],需求 yii2-redis 扩展
  • MongoDB 1.3.0 及以上:通过 [[yii\mongodb\ActiveRecord]],需求 yii2-mongodb 扩展

2、Active Record 的使用

1)简单使用

//获取状态正常的并且以name排序的客户
$customer = Customer::find()->where([‘status‘=>1])->orderBy(‘name‘)->all();
//获取name=gavin 的用户
$customer = Customer::find()->where([‘name‘=>‘gavin‘])->one();
//获取所有状态正常的用户
$count = Customer::find()->where([‘status‘=>1])->count();
//获取特定字段的数据
$customer = Customer::find()->where([‘status‘=>1])->select([‘name‘, ‘nickname‘, ‘address‘])->all();
//获取ID=1,2,3的数据
$customer = Customer::findAll([‘id‘=>[1,2,3]]);
//获取特定条件的一条数据
$customer = Customer::findOne([‘name‘=>‘gavin‘, ‘stuats‘=>1])

2)连表操作

模型:

//YII的连表操作和CAKEPHP的操作基本是一致的,都是通过hasOne  和 hasMany()关联获取的。
比如:我有一个News表,还有一个NewsImages表,一个news对应多条newsimages数据
<?php
namespace backend\models;
 
use  Yii;
use yii\base\Model;
use yii\base\Object;
/**
  * news class
  *
  * @author  Gavin
  * @version 1.0
 */
class News extends \yii\db\ActiveRecord
{
    /**
     * 指定数据表名称
     *
     * @return string
     */
    public static function tableName() {
        return ‘{{%news}}‘;
    }
    /**
     * 对news表和news_amges表进行关联
     * news_images数据表中的news_id对应news表中的id
     *
     * @return Object
     */
    public function getNewsImages() {
        return $this->hasMany(NewsImages::className(), [‘news_id‘=>‘id‘]);
    }
}
<?php
namespace backend\models;
 
use Yii;
use yii\base\Object;
/**
  * news images class
  *
  * @author  Gavin
  * @version 1.0
 */
class NewsImages extends \yii\db\ActiveRecord
{
    /**
     * 指定数据表名称
     *
     * @return string
     */
    public static function tableName() {
        return ‘{{%news_images}}‘;
    }
    /**
     * news image 数据与news数据相关联
     *
     * @return Object
     */
    public function getNews() {
        return $this->hasOne(News::className(), [‘id‘=>‘news_id‘]);
    }
}

控制器

<?php
namespace backend\controllers;
 
use Yii;
use yii\base\Controller;
use backend\models\News;
 
class NewsController extends Controller
{
    /**
     * 连表查询数据
     *
     * @return void
     */
    public function actionLB() {
        $news = News::findOne(3);
        $newsImage = $news->newsImages;
        echo "<pre>";
        var_dump($news);
        var_dump($newsImage);
        die;
    }
}

备注:如果查询的关联表需要获取字段,在同一个表中应该这么写:【获取的特定字段一定包含关联字段,否则无法获取数据】

$object = News::find()->orderBy(‘published_time DESC, created_time DESC‘);
$newsDatas = $object->select([‘id‘, ‘title‘, ‘status‘, ‘recommend‘, ‘set_top‘, ‘hot_focus‘, ‘published_time‘, ‘created_time‘])
->offset($pages->offset)
->limit($pages->limit)
//获取关联表的字段
->with([‘newsImages‘=>function($object){$object->select(‘id‘, ‘image_url‘);}])
->asArray()
->all();

WHERE多条件的使用


AND

$condition = [‘status‘=>1, ‘set_top‘=>1]

如果是  or  来怎么处理呢?

$condition = [‘or‘, ‘recommend=1‘, ‘status=2‘];

$condition = [‘or‘, ‘recommend=1‘, ‘source="http://dreameng.blog.51cto.com"‘];

IN

$condition = [‘in‘‘id‘, [1,2,3]];

LIKE

$condition = [‘like‘‘source‘‘dreameng‘];


AND  |  OR

$condition = [‘and‘‘recommend=1‘, [‘or‘ ,‘source="http://dreameng.blog.51cto.com"‘‘status=1‘]];

时间: 2024-08-05 15:22:57

YII2.0 AcriveRecord的简单使用的相关文章

Yii2.0 事件的简单用法

事件的绑定,像js那样,可以通过on方法定义或者说是绑定一个事件.在yii2中,事件的绑定是通过yii\base\Component 的on方法进行操作的,很显然,同js操作一样,我们在定义事件的同时,需要为其绑定一个回调函数. 看下例子,先写下一个控制器中,用on绑定事件,然后在方法里面用triggle调用 namespace backend\controllers; use yii\web\Controller; class EventController extends Controlle

[moka同学笔记]yii2.0 dropdownlist的简单使用

1.controller控制中 $modelCountrytelCode = CountryTelCode::find()->orderBy('id DESC')->all(); $telCode = ArrayHelper::map($modelCountrytelCode,'area_code','name'); //显示name,传值area_code ***********其他代码************ return $this->render('createUser', [

yii2.0场景的简单使用

一.规则中使用场景规则场景的使用模型层public function rules(){ return [ [['name','product_id'],'required','on'=>'add], ];}表示只在add场景下改规则才生效.在控制器中指定场景:$model->scenario = "add";或者$model = new User(['scenario' => 'add']); 最后使用函数触发验证: $model->load(Yii::$app

下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作

下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find()->where(['name' => '小伙儿'])->one(); 此方法返回 ['name' => '小伙儿'] 的一条数据: User::find()->where(['name' => '小伙儿'])->all(

Yii2.0 实现RESTful风格的简单API

一.创建数据库 首先,在mysql中创建一个名为yii2basic的数据库,并创建一张名为player的表. 二.配置 1.app/config/db.php <?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii2basic', 'username' => 'root', 'password' => '', 'charset' => 'utf8',

Yii2.0实用功能技巧解密之——分页功能

Yii中的分页功能主要由yii\web: Linkable接口.yii\widgets: LinkPager类和yii\data: Pagination类三个组成. yii\data: Pagination 主要功能是对分页中的参数进行设置,如当前页.每页大小.总页数,总记录数等. yii\widgets: LinkPager 主要是根据yii\data: Pagination类所提供的参数生成前台页面的分页html代码. 使用:先在action里面生成分页对象,然后在前台的LinkPager中

BUG YII2.0 $ is not defined

BUG描述:$ is not defined 没有加载jquery成功 原因:Yii2.0将JS代码默认加载页面加载后 解决方案: 第一种方案:最简单方法是在 assets\AppAsset.php 中加上,页面前加载 public $jsOptions = array( 'position' => \yii\web\View::POS_HEAD ); 第二种方案:But in production you usually want the scripts to load last, and i

Yii2.0中文开发向导——高级应用程序模板

高级应用程序模板这个模板用在大型的团队开发项目中,而且后台从前台独立分离出来以便于部署在多个服务器中.由于YIi2.0的一些新的特性,这个程序模板的功能要更深一点.提供了基本的数据库的支持,注册.密码找回等功能.安装可以通过Composer来安装如果没有安装Composer,先安装 curl -s http://getcomposer.org/installer | php 然后用如下命令来获取 php composer.phar create-project --prefer-dist --s

yii2.0数据库查询修改等方法

yii2.0学习有一段时间了,给大家分享一下一些简单的查询等如何操作. 查询:(这里最前面的Test是引用的模型名) Test::find()->all();    此方法返回所有数据: 这些查询出来是对象形式,但是一般转换成数组格式: Test::find()->asArray()->all();     加上asArray()就取得数组形式的数据了,下面的自行添加. Test::findOne($id);   此方法返回 主键 id=1  的一条数据(举个例子): 条件查询:wher