thinkphp5.1学习笔记(4)

thinkphp5 框架原理与实战 学习笔记 thinkphp5 框架原理与实战 学习笔记 文章目录thinkphp5 框架原理与实战 学习笔记第一章 thinkphp入门1.1 初识thinkphp1.1.1 什么是框架1.1.2 常见得PHP框架1.1.3 ThinkPHP的发展历程1.2 开发环境搭建1.2.1 Apache安装与配置1.2.2 PHP安装与配置1.2.3 MySQ安装部署1.2.4 配置虚拟主机1.2.5 Composer依赖工具1.2.6 Visual Studio Code 编辑器1.3 ThinkPHP安装1.3.2 使 阅读详情

PHP中的 trait 关键字的使用

说通俗点,PHP中使用trait关键字是为了解决一个类既想集成基类的属性和方法,又想拥有别的基类的方法,而trait一般情况下是和use搭配使用的。

<?php
  trait Drive {
    public $carName = 'trait';
    public function driving() {
      echo "driving {$this->carName}\n";
    }
  }
  class Person {
    public function eat() {
      echo "eat\n";
    }
  }
  class Student extends Person {
    use Drive;
    public function study() {
      echo "study\n";
    }
  }
  $student = new Student();
  $student->study();
  $student->eat();
  $student->driving();

?>

输出结果如下:

study
eat
driving trait

二、软删除

在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复。

要使用软删除功能,需要引入SoftDelete trait,例如User模型按照下面的定义就可以使用软删除功能:

  1. <?php
  2. namespace app\index\model;
  3. use think\Model;
  4. use think\model\concern\SoftDelete;
  5. class User extends Model
  6. {
  7. use SoftDelete;
  8. protected $deleteTime = 'delete_time';
  9. }

定义好模型后,我们就可以使用:

  1. // 软删除
  2. User::destroy(1);
  3. // 真实删除
  4. User::destroy(1,true);
  5. $user = User::get(1);
  6. // 软删除
  7. $user->delete();
  8. // 真实删除
  9. $user->delete(true);

默认情况下查询的数据不包含软删除数据,如果需要包含软删除的数据,可以使用下面的方式查询:

  1. User::withTrashed()->find();
  2. User::withTrashed()->select();
如果仅仅需要查询软删除的数据,可以使用:

  1. User::onlyTrashed()->find();
  2. User::onlyTrashed()->select();

恢复被软删除的数据

  1. $user = User::onlyTrashed()->find(1);
  2. $user->restore();


软删除仅对模型的删除方法有效,如果直接使用数据库的删除方法则无效,例如下面的方式无效(将不会执行任何操作)。

$user = new User;$user->where('id',1)->delete(


详情查询    http://www.shouce.ren/api/view/a/15625    模型里的软删除

thinkphp5.1 Excel导入导出 thinkphp5.1版本取消`Loader::import`方法以及`import`和`vendor`助手函数,推荐全面采用命名空间方式的类以及自动加载机制,如果必须使用请直接改为php内置的`include`或者`require`语法。public function upload() { // 获取表单上传文件 $ file = request() - &gt; file ('excel... 阅读详情

相关推荐

ThinkPHP5.1中使用Redis来缓存

问题 在thinkphp5.1项目中需要引入Redis,安装redis后在tp5.1写入相关的操作代码后却一直报错,可能出现的问题如下: 1. 安装不正确,即redis没正常运行 2. 没有添加php_redis驱动扩展 3. php.ini修改位置不正确 4. tp5.1中配置代码不正确 解决方案 首先检查在GUI界面下是否能够连接到Redis,如果不能则要检查R...

坚持不懈 1万+

Thinkphp5 模型里别名alias不生效bug【已解决】

为什么80%的码农都做不了架构师?>>> ...

weixin_33738578的博客 2902

Thinkphp 5.1安装

环境搭建 安装 由于Thinkphp5.1【以下简称TP5.1】不提供完整版下载,因此需要通过Composer或Git的方式来下载。本次安装环境里的操作系统为Windows,安装方式是Composer。 首先安装好Composer,然后命令行界面切换到安装程序目录下,执行命令: composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 然后运行 composer create-pro.

ylnzzl的博客 2288

thinkphp通过with查询,并通过关联表进行筛选

直接添加一个where条件,然后条件里面用表名.字段即可,非常方便。

张小勇的博客 2312

PHP框架ThinkPHP5.1的安装

目录*PHP环境**安装Composer**安装TP5.1* PHP环境 详见:Win10下安装PHP集成环境WAMP; 安装Composer 手册链接:ThinkPHP5.1完全开发手册; 安装Composer:官网下载; Next,不用勾选后直接安装; 进入命令提示符输入“composer”,出现界面代表安装成功; 安装TP5.1 安装PHP的Composer:命令提示符输入“composer config -g repo.packagist composer https://p

GDQ的博客 1758

【TP5】thinkphp5初体验1

听说thinkphp5要正式发布了,对于这个蛮不错的实用开发工具,我觉着还是有必要继续跟进学习使用使用的,翻了翻资料找到了这个还未完善的文档,不过,够了,先来个简单开始吧,本文用的是dev-master分支。 更多关注github:https://github.com/liu21st/think 文档地址:http://www.kancloud.cn/thinkphp/thinkphp5-g

丁一鸣的优快云 2268

thinkphp5.0的alias、join、field、where、实操使用详解

  public function ceshi() { //给表取别名 $alias=['admin_user'=&gt;'au','admin_class'=&gt;'ac']; //join数据必须包含2个中括号(SQL join 用于把来自两个或多个表的行结合起来。)第一个参数是表名,第二个参数是表达式 ...

橙-极纪元-JJYCheng 1万+

thinkphp 5.1 部分知识记录<一>

ThinkPHP框架配置与路由系统详解 本文详细介绍了ThinkPHP框架的核心配置系统、架构设计及路由机制。配置系统分为四个层级:惯例配置(内置)、应用配置(全局)、模块配置(覆盖应用配置)和动态配置(请求级临时配置)。框架采用PSR-4自动加载规范,支持命名空间和依赖注入,并提供了Facade门面实现静态调用动态类。 路由系统支持多种定义方式: 基础路由规则(GET/POST等7种请求类型) 快捷路由注册方法 七种路由地址定义方式(模块/控制器、重定向、闭包等) 高级功能包括:模型绑定、缓存路由、中间

小川搞开发的博客 1421

ThinkPHP关联模型只查询部分字段

tp关联模型查询部分字段

qq_40787608的博客 2047

实战指南:基于华为Ascend NPU的大模型W8A8量化调优与精度提升

本文提供了一份基于华为Ascend NPU进行大模型W8A8量化的实战调优指南。详细介绍了从环境搭建、使用msmodelslim框架进行基础量化,到通过离群值抑制、校准集优化和量化回退等关键技术提升精度的全流程。旨在帮助开发者在华为NPU硬件上实现模型推理的显著加速,同时有效控制精度损失。

weixin_29227425的博客 271

QMI8658姿态传感器实战:从校准到自检的完整避坑指南

本文详细解析了QMI8658姿态传感器的校准与自检流程,提供了从硬件环境搭建到高级功能开发的完整避坑指南。通过真实案例揭示电源设计、接口优化、温度补偿等关键细节,帮助开发者提升传感器精度和可靠性,适用于工业级应用场景。

weixin_29184075的博客 455

Thinkphp5.1模型 with操作关联表字段

1.withjoin是一种方法 static function getVisitResult() { $result = self::withjoin('userItems','LEFT') ->where('userItems.id','=',1) ->order('id desc') ...

qq_41821881的博客 1万+

银河麒麟V10系统下VLC播放器安装全攻略(附3.0.9.2版本离线包下载)

本文详细介绍了在银河麒麟V10操作系统无网络环境下,从零开始编译安装VLC 3.0.9.2播放器的完整攻略。通过构建本地YUM仓库解决依赖问题,提供离线资源包下载,并逐步指导完成编译环境配置、软件编译与安装,帮助用户在国产麒麟系统上成功部署强大的多媒体播放能力。

a2b3c4d5e的博客 1214

从thinkphp 5.0升级到5.1的18个理由

ThinkPHP5.1从2018年初发布到现在,一路小步快跑,快速迭代的同时也更新了大量的新特性。 那么到底是否值得升级到新版呢?如果你还在纠结选用5.0的商城系统还是选用thinkphp 5.1的系统,本文就和大家分享下值得升级到5.1的18个理由。 1、快速启动测试服务器:直接跨过门槛学框架 2、对象容器引入和依赖注入改进:实用高逼格 3、增加门面对象:类的小助理 4、路由更对象...

连锁收银系统 1万+

手把手教 - VSCode 开发 GD32F450 单片机

系统版本:rt-thread v5.2.2单片机型号:GD32F450ZK基于文章进行开发。

weixin_46158019的博客 841

HBase骚操作之数据加载方式BulkLoad

本文研究了一种HBase BulkLoad的入库方式,该方式利用HBase的数据信息按照特定格式存储在hdfs内这一原理,直接在HDFS中生成持久化的HFile数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。该方式配合MapReduce完成,高效便捷,而且不占用Region资源,增添负载,在大数据量写入时能极大的提高写入效率,并降低对Hbase节点的写入压力。HBase BulkLoad对于异构数据源的合并及大量数据一次性导入具有重要指导意义,相比HBase Put操作在性能上具有较高的优势

石榴姐yyds 7789

ThinkPHP5.1 安装 workerman 指导

最近需要在自己的网站后台,设计消息推送业务,通过网上资料参考,觉得 workerman 是个很好的选择,在此记录一下ThinkPHP5.1 框架下的安装操作,希望可以帮到更多的人 …workerman 手册 框架版本:ThinkPHP5.1.2;使用工具:composer composer require topthink/think-...

u011415782的专栏 4338

YOLOv11的网络结构概览(Backbone-Neck-Head):介绍骨干网络(Backbone)、特征融合层(Neck)和检测头(Head)的作用

YOLOv11架构解析:从特征提取到目标检测 YOLOv11继承了YOLO系列的经典三组件架构,包含Backbone、Neck和Head三部分。Backbone基于改进的CSPDarknet,通过Conv和C3模块进行多尺度特征提取;Neck采用FPN+PAN结构融合不同层次特征;Head负责检测任务输出。网络整体设计注重高效性和多尺度特征融合,采用C3模块优化信息流和梯度流,配合SPPCSPC增强特征表达能力。该架构在保持实时检测速度的同时,提升了目标检测精度,体现了YOLO系列"一次看全图&q

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1万+

ThinkPHP5.1连接Redis的四种途径

ThinkPHP5.1连接Redis的四种途径四种方式的演示代码自定义静态代理简单封装连接 第一种:perl redis扩展; 第二种:ThinkPHP缓存扩展; 第三种:predis扩展; 第四种:自己简单封装第一种; 四种方式的演示代码 //redis初步应用 public function test31(){ //第一种连接Redis方法 装好扩展后的...

weixin_44107914的博客 2074

嵌入式开发之瑞芯微RK356x--基本环境搭建

嵌入式环境搭建

NexyHO的博客 617

Linux Kernel入门到精通系列讲解 - 总目录

在学习Linux Kernel之前,需要先准备开发环境,方便后续进行开发。可以根据自身情况,选择性阅读该章节。学习该章节之前,你应该了解一下网络概念,明白为什么要讲这些,才能更有方向的去理解学习。Linux ARM平台开发系列讲解(设备树篇) 4.1.1 设备树的原理详解。本项目完全开源,仅供学习使用,如需其他用途,请与本人联系。),本章节你可以学习到。摄像头V4L2子系统、Linux kernel常用的子系统等,ARM架构、RISCV架构、Uboot等。

DSMGUOGUO的博客 1万+

lnmp1.4 一键安装包 nginx配置thinkphp5

此问题困扰了我好几天,今天终于重坑里面爬出来了,留下笔记,希望对大家有帮助! 环境:Nginx1.12.1  PHP5.6  Coentos7.2 修改网站配置文件  例如 /usr/local/nginx/conf/vhost/test.bb.com server     {         listen 80;         #listen [::]:80;   

gaoxiufu的博客 2801

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Thinkphp 5.1和Thinkphp 5.0的区别

ThinkPHP5.1在5.0的基础上对底层架构做了进一步的改进,引入新特性,并提升版本要求。另外一个事实是,5.1版本看起来对开发者更加友好,表现在目录结构更直观、调试输出更直观和代码提示更直观。 ThinkPHP5.1运行环境要求PHP5.6+,虽然不支持5.0的无缝升级,但升级过程并不复杂(请参考升级指导),5.1.*版本基本上可以支持无缝升级。 主要新特性:(V5.1.27版本开始,...

QinDaBao_的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ThinkPHP5.1学习--ThinkPHP5.1 入门开启

一.框架简介 ThinkPHP5.1 是目前框架正式版的最新版本; ThinkPHP6.0 目前是预览版(尚未稳定的测试版),正式版后考虑制作; TP 框架是免费开源的、轻量级的、简单快速且敏捷的 PHP 框架; 你可以免费使用 TP 框架,甚至可以将你的项目商用; ThinkPHP5.1 要求 PHP 版本是 5.6+以上(目前最新版本是 7.x); 我们采用最新 7.x 来运行 TP5.1,而预览版 TP6 需要 7.1+; 集成环境这里采用 windows 结合 wamp,其它系统或环境满足版本要求

Cure The World的博客 2077

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ThinkPHP5.1导出excel表

ThinkPHP5.1导出excel表 注意,5.1版本禁用了Loader的内置规则 第一步:下载phpexcel拓展 composer require phpoffice/phpexcel 黄色警告不需要理会,下载完成后可以在框架的/vendor/phpoffice/phpexcel下查看 第二步:部署代码 use PHPExcel; use PHPExcel_IOFactory;//引入两个...

Jouzeyu的博客 2579

通过composer安装TP5.1(Thinkphp5.1)

  现在TP5越来越火了,TP5也更新到了5.1版本,但是5.1以上版本只能通过composer来进行安装,那么这里贴出详细的步骤   前提:PHP版本必须要5.6以上   参考网址:http://www.thinkphp.cn/topic/52362.html    1、将PHP的版本放进环境变量   (1)查看phpstudy中选择的版本号:   (2)在phpstu/p...

3703
上一篇: thinkphp5.1学习笔记(3)
下一篇: HTTP响应状态码 含义
Json159
博客等级 码龄9年 60粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值