作者归档:admin

Thinkphp 便捷插入 POST 和更新

限制传入数据类型和数据信息

不要忘记引入:use think\facade\Request;

use think\facade\Request;

$data = Request::only(['name','email','id']);
$data['id'] = $this->request->get('id/d');
$data['id'] = $this->request->get('sexy/d',1);//设置默认为1
 

强制转换符号 d(数字) b(布尔) s(字符串) a(数组) f(浮点)

标识符描述示例
/s字符串类型转换$this->request->get('param/s')
/a数组类型转换$this->request->get('param/a')
/b布尔类型转换$this->request->get('param/b')
/f浮点类型转换$this->request->get('param/f')
/int整型转换(等同于 /d$this->request->get('param/int')
/bool 或 /boolean布尔类型转换$this->request->get('param/bool') 或 $this->request->get('param/boolean')
参数类型转换标识符

save 插入信息 输入 $_POST

$user = new User;
// post数组中只有name和email字段会写入
$user->allowField(['name','email'])->save($_POST);

//或者

$user = new User;
// 过滤post数组中的非数据表字段数据
$data = Request::only(['name','email']);
$user->save($data);

// 获取自增ID
echo $user->user_id;

多个条目插入 saveAll()

$user = new User;
$list = [
    ['name'=>'thinkphp','email'=>'thinkphp@qq.com'],
    ['name'=>'onethink','email'=>'onethink@qq.com']
];
$user->saveAll($list);

CREATE静态

$user = User::create([
    'name'  =>  'thinkphp',
    'email' =>  'thinkphp@qq.com'
]);
echo $user->name;
echo $user->email;
echo $user->id; // 获取自增ID

更新 SAVE 需要主键,使用数组限制allowField来更新

$user = new User;
$list = [
    ['name'=>'thinkphp','email'=>'thinkphp@qq.com'],
    ['name'=>'onethink','email'=>'onethink@qq.com']
];
$user->saveAll($list);


$user = new User;
$list = [
    ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],
    ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com']
];
$user->saveAll($list);

#使用allowField来更新
$user->allowField(['name', 'email'])->save($_POST);

#传入前过滤,在控制器里面设置
$user = User::find(1);
// post数组中只有name和email字段会写入
$data = Request::only(['name','email']);
# $data为传入只保留name和email
$user->save($data);

UPDATE静态更新 不会更新update_time 需要主键

User::update(['name' => 'thinkphp'], ['id' => 1]);

ESP32CAM 设置

from camera import Camera, GrabMode, PixelFormat, FrameSize, GainCeiling
import time
cam = Camera(
    data_pins=[45,47,14,40,5,42,41,39],
    vsync_pin=21,
    href_pin=38,
    sda_pin=17,
    scl_pin=18,
    pclk_pin=48,
    xclk_pin=-1,
    xclk_freq=20000000,
    powerdown_pin=46,
    reset_pin=9,
    pixel_format=PixelFormat.RGB565,
    frame_size=FrameSize.QVGA,
    jpeg_quality=90,
    fb_count=2)
cam.init()

#f=open("a.jpg","wb")
#f.write(bytes(img))
#f.close()

while 1:
    c=time.ticks_ms()
    img = cam.capture()
    time.sleep_ms(100)
    e=time.ticks_ms()
    print(1/((e-c)/1000),"FPS")

LCD ST7789 和ESP32S3 OV2640

from machine import Pin, SPI
import st7789py as st7789
spi=SPI(1,baudrate=20000000, polarity=1, sck=Pin(6), mosi=Pin(7),miso=Pin(15))
tft=st7789.ST7789(spi,240,320,reset=Pin(3, Pin.OUT),cs=Pin(16, Pin.OUT),dc=Pin(10, Pin.OUT),backlight=Pin(11, Pin.OUT),)
tft.rotation(1)
tft.fill(st7789.GREEN)
from camera import Camera, GrabMode, PixelFormat, FrameSize, GainCeiling
import time
cam = Camera(
    data_pins=[45,47,14,40,5,42,41,39],
    vsync_pin=21,
    href_pin=38,
    sda_pin=17,
    scl_pin=18,
    pclk_pin=48,
    xclk_pin=-1,
    xclk_freq=20000000,
    powerdown_pin=46,
    reset_pin=9,
    pixel_format=PixelFormat.RGB565,
    frame_size=FrameSize.QVGA,grab_mode=GrabMode.LATEST, fb_count=2)
cam.init()


while 1:
    c=time.ticks_ms()
    img = cam.capture()
    tft.blit_buffer(img, 0, 0, 240, 320)
    e=time.ticks_ms()
    print(1/((e-c)/1000),"FPS")

JS代码: 数字、字符串、转化为保留两位小数 千分位显示

function formatNumber(num) {
  // 判断输入是否为字符串,如果是字符串则转为数字
  if (typeof num === 'string') {
    // 移除可能存在的非数字字符(如逗号等)
    num = parseFloat(num.replace(/[^0-9.-]+/g, ''));
    if (isNaN(num)) {
      return 0; // 如果转换失败,返回 0 或其他默认值
    }
  } else if (typeof num !== 'number') {
    // 如果输入既不是字符串也不是数字,返回 0 或其他默认值
    return 0;
  }
  // 保留两位小数并转为数字返回
  return Number(num.toFixed(2));
}
function showFormatNumber(num) {
    if (typeof num === 'string') {
        num = parseFloat(num.replace(/,/g, ''));
        if (isNaN(num)) {
            return '0.00';
        }
    }
    if (typeof num !== 'number') {
        return '0.00';
    }
    return num.toLocaleString('en-US', {
        minimumFractionDigits: 0,
        maximumFractionDigits: 2
    });
}

Thinkphp 多表查询 如果为NULL 为0 且外接表不存在则为0

需要leftJoin 关联一个可能为空的表,设置IFNULL(COUNT(a.id),0)

RT 上代码

        return $this->alias("a")
                    ->join("loan_co b","a.loan_co_a=b.id")
                    ->join("loan_co c","a.loan_co_b=c.id")
                    ->leftJoin("loan_hk d","a.id=d.lid")
                    ->where($where)
                    ->field("a.*,b.name as aname,c.name as bname,IFNULL(sum(d.hk_money),0) as pk")
                    ->group("a.id")
                    ->select();

范例二

反复调用field(“a.*,IFNULL(SUM(b.number),0) as done_number,ROUND(100*(number-done_number)/number,2)”)

  • IFNULL(SUM(b.number),0) as done_number
  • ROUND(100*(number-done_number)/number,2)
    public function show_ones($id){
        // 对大资产ID下的信息全部查询
        $PropertyOne=new PropertyOneModel();
        $where[]=['a.pid',"=",$id];
        return $PropertyOne->alias("a")
                    ->leftJoin("lease b","b.po_id=a.id")
                    ->where($where)
                    ->field("a.*,IFNULL(SUM(b.number),0) as done_number,ROUND(100*(number-done_number)/number,2)")
                    ->group("a.id")
                    ->select();
    }