use \app\model\Staff; // 模型类
// 1. 取出原记录
$old = Staff::find($id)->toArray(); // 也可以用 get()
// 2. 去掉主键(自增id)
unset($old['id']);
// 3. 插入新记录
$newId = Staff::insertGetId($old); // 返回新的主键值
thinkphp 拷贝一条数据重新插入表
发表评论
use \app\model\Staff; // 模型类
// 1. 取出原记录
$old = Staff::find($id)->toArray(); // 也可以用 get()
// 2. 去掉主键(自增id)
unset($old['id']);
// 3. 插入新记录
$newId = Staff::insertGetId($old); // 返回新的主键值
conda create --name unsloth_env \
python=3.11 \
pytorch-cuda=12.1 \
pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers \
-y
conda activate unsloth_env
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install --no-deps trl peft accelerate bitsandbytes
pip install --upgrade pip
pip install "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"
unsloth的使用非常简单,主要分为以下几个步骤:
from unsloth import FastLanguageModel
from unsloth import is_bfloat16_supported
import torch
from trl import SFTTrainer
from transformers import TrainingArgumentsrom datasets import load_dataset
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/llama-3-8b-bnb-4bit",
max_seq_length = 2048,
dtype = None,
load_in_4bit = True,
)
model = FastLanguageModel.get_peft_model(
model,
r = 16,
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",],
lora_alpha = 16,
lora_dropout = 0,
bias = "none",
use_gradient_checkpointing = "unsloth",
random_state = 3407,
max_seq_length = 2048,
)
trainer = SFTTrainer(
model = model,
train_dataset = dataset,
dataset_text_field = "text",
max_seq_length = 2048,
tokenizer = tokenizer,
args = TrainingArguments(
per_device_train_batch_size = 2,
gradient_accumulation_steps = 4,
warmup_steps = 10,
max_steps = 60,
fp16 = not is_bfloat16_supported(),
bf16 = is_bfloat16_supported(),
logging_steps = 1,
output_dir = "outputs",
optim = "adamw_8bit",
seed = 3407,
),
)
trainer.train()
return $this->success("ok",null,['id'=>$info]);
AJAX
{
"code":1,
"msg":"ok",
"data":{"id":"9"},
"url":"http:\/\/test.acfun.org.cn\/portal\/money\/get_id.html?id=69",
"wait":3}
范例
$info=LeaseModel::with(
[
"fapiao"=>function($query) use($time_start,$time_end,$is_created,$is_done,$is_print){
$query->where('time_start','>=',$time_start);
$query->where('time_end','<=',$time_end);
if($is_done>0){
$query->where('is_done','>',$is_done);
}elseif($is_done==='0'){
$query->where('is_done','=',$is_done);
}
if($is_created>0){
$query->where('is_created','>',$is_created);
}elseif($is_created==='0'){
$query->where('is_created','=',$is_created);
}
if($is_print>0){
$query->where('is_print','>',$is_print);
}elseif($is_print==='0'){
$query->where('is_print','=',$is_print);
}
},"lease_contract","lease_contract.ca","lease_contract.cb","lease_contract.cc","lease_contract.cd","propertyone","propertyone.property"
])->alias("a")
->join("lease_contract b","a.lease_id=b.id")
->join("property_one c","a.po_id=c.id")
->where($where)
->leftJoin("co name_a","name_a.id=b.a")
->leftJoin("co name_b","name_b.id=b.b")
->leftJoin("co name_c","name_c.id=b.c")
->leftJoin("co name_d","name_d.id=b.d")
->where($where)
->whereNull("b.delete_time")
->whereNull("c.delete_time")
->whereNull("name_a.delete_time")
->whereNull("name_b.delete_time")
->whereNull("name_c.delete_time")
->whereNull("name_d.delete_time")
->field("a.*")
->select();
多重调用 ,with多级关联 ,join ,
其中fields(a.*) 因为有表格join时候和本表中有键值冲突所以中使用 a.* 反正都用了关联模型
使用jquery阻止a标签跳转,使用AJXA发起请求 后根据a标签的提示执行js语句来实现动态加载
A标签
<a href="{:url('portal/fapiao/print_id',['id'=>$so.id])}" class="ajax-click btn btn-primary btn-sm" js="ts.parent().parent().parent().attr('class','bg-warning');var span=ts.parent().parent().prev().find('span:first');span.text('已开票');span.attr('class','label label-primary')"data-msg="确定已开票吗?">完成</a>
<a href="{:url('portal/fapiao/done_id',['id'=>$so.id])}" class="ajax-click btn btn-success btn-sm" js="ts.parent().parent().parent().attr('class','bg-success');var span=ts.parent().parent().prev().find('span').eq(1);span.text('已付款');span.attr('class','label label-success')" data-msg="确定已收款?">收款</a>
其中的 js 属性为eval执行js语句,其中 ajax-click 用于绑定点击事件来组织跳转a 标签的href,在函数中提前将$(this) 变为局部变量,在函数中使用,(因为ajax请求中$(this) 为请求本身)eval执行
$(".ajax-click").click(function(){
event.preventDefault();//停止跳转
var url=$(this).attr('href');
var ts=$(this);
var js=$(this).attr('js');
var jugg=confirm($(this).attr('data-msg'));
if(jugg){
$.ajax({
url:url,
success:function(data){
console.log(data);
if(data.code){
// c=ts.parent().parent().parent().attr("class","info")
eval(js);
// console.log(c)
// window.location.href=data.url;
}
}
})
}
})