Yii2学习-关于Model总结

这篇博客详细介绍了Yii2框架中Model的使用,包括控制器周期、AR模型的查询方法,如where、andWhere等,批处理查询,验证规则定义、自定义验证规则以及数据操作的全过程,如新增、修改和删除数据。强调了使用where方法定义查询条件的重要性,并提供了模型验证场景的定义和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制器

控制器周期

beforeAction

/**
 * action 运行的前置操作 
 *
 * 比较适合统一化的数据验证,请求数据的接受等
 * @param \yii\base\Action $action action 类
 * @return bool 返回ture 控制器周期才会走下去
 */
public function beforeAction($action)
{
    var_dump($action->id, $action->controller->id);
    return parent::beforeAction($action); // TODO: Change the autogenerated stub
}

afterAction

/**
 * action 后置操作
 *
 * 比较适合返回最后的日志搜集
 * @param \yii\base\Action $action action 类
 * @param mixed $result
 * @return mixed
 */
public function afterAction($action, $result)
{
    return parent::afterAction($action, $result); // TODO: Change the autogenerated stub
}

模型

AR 模型 常用方法

查询数据

// 查询单条
$one = Post::find()->where(['id' => 1])->one();
// 或者
$one = Post::finOne(1);

// 查询多条
$posts = Post::find()->where(['status' => 1])->all();
// 或者
$posts = Post::findAll(['status' => 1]);

// 通过sql查询
$posts = Post::findBySql('SELECT * FROM `posts` WHERE `status` = :status', [':status' => 1])->all();

查询条件的设定

where 查询支持的参数
  • 字符串格式 例如: ‘status=1’
// 对应的SQL: WHERE status = 1
$query->where('status = 1');
// 使用字符串方式,可以绑定参数
$query->where('status = :status', [':status' => 1])
  • 哈希格式 例如: [‘status’ => 1, ‘type’ => 1]

哈希格式最适合用来指定多个 AND 串联起来的简单的”等于断言”子条件。

// 对应的SQL: WHERE (`status`=1) AND (`type`=1)
$query->where(['status' => 1, 'type' => 1])
// 如果值为一个数组会转为IN 对应SQL: WHERE (`status`=1) AND (`type` IN (1, 2, 3))
$query->where(['status' => 1, 'type' => [1, 2, 3]])
  • 操作符格式 例如: [‘=’, ‘status’, 1]

可以实现比较复杂的查询条件

  1. 格式
['操作符', 操作数1, 操作数2, ...];
  1. 演示
// 简单单个查询 对应的SQL: WHERE `status` >= 1
$query->where(['>=', 'status', 1])

// 多个条件 AND 连接 对应的SQL: WHERE (`status` >= 1) AND (`type` <= 3)
$query->where(['and', ['>=', 'status', 1], ['<=', 'type', 3]])

// 多个条件 OR 连接 对应SQL: WHERE (`status` IN (1, 3)) OR (`type` >= 2)
$query->where('or', ['in', 'status', [1, 3], ['>=', 'type', 2]])

// 比较复杂组合的SQL 对应SQL: WHERE (`create_type` = 6) AND (`status` = 0) AND (`is_fail` = 0) AND (((`last_view_time` = 0) AND (`create_time` <= 1503562511)) OR ((`last_view_time` > 0) AND (`last_view_time` <= 1503562511)))
$query->where([
     'and',
    ['=', 'create_type', 6],
    ['=', 'status', 0],
    ['=', 'is_fail', 0],
    ['or',
        ['and', ['=', 'last_view_time', 0], ['<=', 'create_time', time()]],
        ['and', ['>', 'last_view_time', 0], ['<=', 'last_view_time', time()]]
    ]
]);
  1. 操作符说明

    • and 和 or 确定多个条件通过什么方式连接
    • between 和 not between

      // 数组需要四个元素 对应SQL: WHERE `id` BETWEEN 1 AND 10
      ['between', 'id', 1, 10] 
    • in 和 not in

      // 对应SQL: WHERE `status` IN (1, 3)
      ['in', 'status', [1, 3]]
    • like

      // 默认 对应SQL: WHERE `name` LIKE '%username%'
      ['like', 'name', 'usernam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值