可以创建一个模型,引入其他含有表的模型,来完成CURD,提高代码性能
本身该模型,没有任何表,通过引入实现各项数据操作
可以创建一个模型,引入其他含有表的模型,来完成CURD,提高代码性能
本身该模型,没有任何表,通过引入实现各项数据操作
一对一、一对多、多对多
关于软删除,默认关联是保留,不用额外操作,但是join的话需要把delete_time 的null判断加入。
在user模型中需要关联模型的其中加入一个profile方法。其中Profile为已经存在的模型文件
public function profile(){
return $this->hasOne(Profile::class);
}
#缩写了外键 profile中的user_id
$this->hasOne(Profile::class,"user_id","id");
表示User模型的id主键与profile模型中的外键user_id关联
public function profile()
{
return $this->hasOne(Profile::class);
}
下面是belongs 在profile模型 本模型中有个user_id 属于外部模型user的主键id关联
public function user()
{
// 定义反向关联
return $this->belongsTo(User::class, 'user_id');
}
return $this->hasMany(Book::class)->order('pub_time');
//上面是省略参数,
//尾部的order可以实现排序
return $this->hasMany(Book::class, 'user_id', 'id')->order('pub_time');
目前的User模型本省的主键,与book模型的user_id实现多个关联
namespace app\model;
use think\Model;
class User extends Model
{
public function book()
{
return $this->hasMany(Book::class)->order('pub_time');
}
}
至少3张表
public function roles(){
return $this->belongsToMany(Role::class, 'user_role', 'role_id', 'user_id');
}
public function users(){
return $this->belongsToMany(User::class, 'user_role', 'user_id', 'role_id');
}
一对多
return $this->hasMany(LeaseModel::class,"lease_id",'id')->order("po_id");
//按照关联表(LeaseModel) 的po_id排序
多对多
public function propertyone(){
return $this->belongsToMany(PropertyOneModel::class,'lease','po_id','lease_id')->order("propertyone.id");
}
//propertyone的id排序
->order("id")
//中间表 lease的id 排序
位置:/你的项目目录/vendor/thinkcmf/cmf-app/src/admin/controller/MainController.php
其中的:public function index(){
}
中添加跳转。
举例:
public function index()
{
$aid=cmf_get_current_admin_id();
if($aid>1&&$aid<30){
return $this->redirect(url("portal/topics/search"));//跳转到会议页面,直接跳转,后期需要修改
}
<div class="row">
<div class="file_model col-md-12">
<script type="text/html" id="files-item-tpl">
<li id="saved-file{id}">
<input id="file-{id}" type="hidden" name="file_urls[]" value="{filepath}">
<input class="form-control" id="file-{id}-name" type="text" name="file_names[]" value="{name}"
style="width: 200px;" title="文件名称">
<a class="btn btn-info" id="file-{id}-preview" href="{preview_url}" target="_blank"><i class="fa fa-download fa-fw"></i></a>
<a class="btn btn-default" href="javascript:uploadOne('文件上传','#file-{id}','file');"><i class="fa fa-upload fa-fw"></i></a>
<a class="btn btn-danger" href="javascript:(function(){$('#saved-file{id}').remove();})();"><i class="fa fa-trash fa-fw"></i></a>
<a class="btn btn-success" href="javascript:(function(){$('#saved-file{id}').before($('#saved-file{id}').next());})();"><i class="fa fa-arrow-down fa-fw"></i></a>
</li>
</script>
<div class="upload_file_div">
<h3>附件</h3>
<ul id="files" class="pic-list list-unstyled form-inline">
</ul>
<a href="javascript:uploadMultiFile('附件上传','#files','files-item-tpl','file');"
class="btn btn-default">选择文件</a>
</div>
</div>
</div>
<hr>
var c=[];
for (var k = 0; k < $('input[name="file_urls[]"]').length; k++) {
var e={
name:$('input[name="file_names[]"]')[k].value,
url:$('input[name="file_urls[]"]')[k].value
}
c.push(e);
}
console.log(c)
//c为数组格式的files信息
var files={files:c}
data={files:files}
$ins['files']=json_encode($this->request->post("files"));
//直接存储到mysql中的表的files键中
注意 默认files值是json存储你需要使用json_decode将其转为array.
$info->files=json_decode($info->files,TRUE)
$this->assign(["info"=>$info]);
#传递给模版
<div class="row">
<script type="text/html" id="files-item-tpl">
<li id="saved-file{id}">
<input id="file-{id}" type="hidden" name="file_urls[]" value="{filepath}">
<input class="form-control" id="file-{id}-name" type="text" name="file_names[]" value="{name}"
style="width: 200px;" title="文件名称">
<a class="btn btn-info" id="file-{id}-preview" href="{preview_url}" target="_blank"><i class="fa fa-download fa-fw"></i></a>
<a class="btn btn-default" href="javascript:uploadOne('文件上传','#file-{id}','file');"><i class="fa fa-upload fa-fw"></i></a>
<a class="btn btn-danger" href="javascript:(function(){$('#saved-file{id}').remove();})();"><i class="fa fa-trash fa-fw"></i></a>
<a class="btn btn-success" href="javascript:(function(){$('#saved-file{id}').before($('#saved-file{id}').next());})();"><i class="fa fa-arrow-down fa-fw"></i></a>
</li>
</script>
</div>
<div class="col-md-12">
<span>附件</span>
<div>
<ul id="files" class="pic-list list-unstyled form-inline">
<notempty name="info.files.files">
<foreach name="info.files.files" item="vo">
<php>$file_url=cmf_get_file_download_url($vo['url']);</php>
<li id="saved-file{$key}">
<input id="file-{$key}" type="hidden" name="file_urls[]"
value="{$vo.url}">
<input class="form-control" id="file-{$key}-name" type="text"
name="file_names[]"
value="{$vo.name}" style="width: 200px;" title="图片名称">
<a class="btn btn-info" id="file-{$key}-preview" href="{$file_url}" target="_blank"><i class="fa fa-download fa-fw"></i></a>
<a class="btn btn-default" href="javascript:uploadOne('文件上传','#file-{$key}','file');"><i class="fa fa-upload fa-fw"></i></a>
<a class="btn btn-danger" href="javascript:(function(){$('#saved-file{$key}').remove();})();"><i class="fa fa-trash fa-fw"></i></a>
<a class="btn btn-success" href="javascript:(function(){$('#saved-file{$key}').before($('#saved-file{$key}').next());})();"><i class="fa fa-arrow-down fa-fw"></i></a>
</li>
</foreach>
</notempty>
</ul>
<a href="javascript:uploadMultiFile('附件上传','#files','files-item-tpl','file');"
class="btn btn-default">选择文件</a>
</div>
</div>
编辑修改的话如前面的一样!
在模型定义中使用protected $type 进行自动转换,如:可以设置为array 这样可以直接插入array的files
<?php
namespace app\model;
use think\Model;
class User extends Model
{
protected $type = [
'status' => 'integer',
'score' => 'float',
'birthday' => 'datetime',
'files' => 'array',
];
}
JS动态添加DIV 使用onclick绑定方法调用本地属性
<script>
var div=$("<div class='one' onclick='onex(event)'>ssssssssss</div>");
div.attr("id","div_aaaa");
$("#info").append(div);
function onex(event){
alert($(event.currentTarget).attr("id"));
}
</script>
<button class="child" onclick="this.parentNode.parentNode.remove()">删除</button>