ThinkPHP6.0 모델
ThinkPHP6 모델
데이터베이스 구성 파일에서 데이터베이스 연결 정보를 구성했는지 확인하세요
모델은 자동으로 데이터 테이블에 해당합니다. 테이블 접두사를 뺀 데이터 테이블 이름, 낙타 표기법 사용, 첫 번째 문자는 대문자로 표시됩니다.
모델에 자동으로 해당하는 데이터 테이블 이름은 소문자 + 밑줄 사양을 따릅니다. 모델의 테이블 속성을 설정해야 합니다.
1. 모델 만들기
모델 이름 | 데이터베이스 접두사 |
Cat | shop_cat |
상품 | shop_goods |
사용자 주문 | shop_user_order |
테이블 접두사 설정: config/database.php
파일의 prefix
config/database.php
文件里 prefix
第一步:创建一个跟控制器平级的目录,目录名:
model
第二步:在
model
创建Goods.php
文件
二、模型操作
在模型中除了可以调用数据库类的方法之外(换句话说,数据库的所有查询构造器方法模型中都可以支持),可以定义自己的方法,所以也可以把模型看成是数据库的增强版
模型文件里的自定义方法,不要和 thinkphp 方法一样名称
模型里的
Goods::
也可以用static::
关键词链式操作,都可以在模型里使用
1、find
查询数据
find 获取单条数据,返回的是当前模型的对象实例
namespace appmodel;
use thinkModel;
class Goods extends Model{
public function find(){
$find = Goods::find(6);
$find = Goods::where('id',7)->find();
return $find;
}
}
2、controller
怎么调用model
namespace appcontroller;
use appmodelGoods;
class Index{
public function index(){
$db = new Goods();
$index = $db->find();
print_r($index);
}
}
find(6) 查询失败,是因为数据库主键名称不是 id
3、select
查询数据
select 获取多条数据,返回的是当前模型的对象实例
public function select(){
$select = Goods::select();
$select = Goods::select(6);
$select = Goods::where('id','>',7)->select();
return $select;
}
4、数据转换
toArray
方法将当前的模型实例输出为数组
public function select(){
$select = Goods::select();
$select = Goods::select(6);
$select = Goods::where('id','>',7)->select();
return $select->toArray();
}
5、增加数据
create
- 1단계 : 컨트롤러와 동일한 수준에 디렉터리를 생성합니다. 디렉터리 이름:
model
- 1단계 : 컨트롤러와 동일한 수준에 디렉터리를 생성합니다. 디렉터리 이름:
2단계:
🎜2.model
에Goods.php 생성 code> file
2. 모델 연산
모델에서 데이터베이스 클래스의 메서드를 호출하는 것 외에 (즉, 데이터베이스의 모든 쿼리 생성자 메서드를 모델에서 지원할 수 있음) , 자신만의 메소드를 정의할 수 있으므로 모델을 데이터베이스의 향상된 버전으로 생각할 수도 있습니다- 모델 파일의 사용자 정의 메소드 thinkphp 메소드 Name🎜🎜
- 🎜
Goods::
와 동일해서는 안 됩니다. 모델의static::
키워드🎜🎜 - 🎜도 사용할 수 있습니다. 모델에서 체인 연산을 사용할 수 있습니다. 🎜🎜🎜🎜1,
find
를 사용하여 데이터를 쿼리하고 🎜🎜find를 사용하여 단일 데이터 조각을 얻으면 반환되는 것은 현재 모델의 객체 인스턴스입니다 🎜🎜. 🎜namespace appmodel;🎜🎜use thinkModel;🎜🎜class Goods 확장 모델{ 🎜🎜 public function find(){🎜🎜 $find = Goods::find(6);🎜🎜 $find = Goods::where('id' ,7)->find();🎜🎜 return $find; 🎜🎜 }🎜🎜}🎜
controller
에서model
을 호출하는 방법 🎜🎜🎜namespace appcontroller;🎜🎜use appmodelGoods;🎜🎜class Index{🎜🎜 public function index(){🎜🎜 사용 사용 사용 ' 사용 ' 통해 ' 통해 ' s ' 통해 사용 ‐ ‐ ‐‐ ‐ 데이터베이스 기본 키 이름이 id🎜🎜3이 아니기 때문에 find(6) 쿼리가 실패했습니다.select
Query data🎜🎜select는 여러 데이터 조각을 가져오고 현재 모델의 객체 인스턴스를 반환합니다🎜🎜 🎜공개 기능 select (){🎜🎜 $select = 상품::select();🎜🎜 $select = 상품::select(6);🎜🎜 $select = 상품::where('id','>' ,7)- >select();🎜🎜 Return $select;🎜🎜}🎜🎜4. 데이터 변환🎜🎜toArray
메소드는 현재 모델 인스턴스를 배열로 출력합니다🎜🎜 🎜공개 기능 select (){🎜🎜 $select = 상품::select();🎜🎜 $select = 상품::select(6);🎜🎜 $select = 상품::where('id','>' ,7)- >select();🎜🎜 return $select->toArray();🎜🎜}🎜🎜5. 데이터 추가🎜- 🎜
create
정적 메소드는 데이터를 추가하고 현재 모델의 객체 인스턴스를 반환합니다🎜🎜🎜🎜🎜public function create(){🎜🎜 $create = Goods::create([🎜🎜 "고양이" = > 3,🎜'제목' = & gt; '신상품', '가격' = & gt; '59 .99 ', ' add_time '= & gt; 시간() ]); 자체 증가 ID Return $create;}데이터 추가에 대한 모범 사례 원칙: 데이터를 추가하려면 create 메서드를 사용하고 일괄적으로 데이터를 추가하려면 saveAll을 사용합니다.
6. 데이터 수정update
정적 메서드는 데이터를 수정하고 현재 모델의 객체 인스턴스를 반환합니다 저장
데이터를 업데이트하려면 필드를 변경하세요. 이 방법은 updateupdate
静态方法修改数据,返回的是当前模型的对象实例save
在取出数据后,更改字段更新数据。这种方式是最佳的更新方式
namespace appmodel;
use thinkModel;
class Goods extends Model{
public function update(){
# 更新方式1
$update = Goods::update(
['price'=>'99.99'],
['id'=>22]
);
return $update;
# 更新方式2
$user = Goods::find(23);
$user->price = '102.99';
$save = $user->save();
return $save;
}
}
7、删除数据
delete
静态方法删除数据,返回的是当前模型的对象实例destroy
根据主键删除
public function delete(){
# 删除方法1
$delete = Goods::where('id',3)->delete();
# 删除方法2
$delete = User::destroy(4);
return $delete;
}
TP模型如果只能增删查改,不如在
Controller
namespace appmodel;use thinkModel;class Goods extends Model{🎜🎜 public function update(){🎜🎜 #Update method 2를 업데이트하는 가장 좋은 방법입니다. return $update;🎜🎜 # 업데이트 방법 2🎜🎜 $user = Goods::find(23);🎜🎜 '를 사용하여 사용 out out out through out ' ' s ' ~ ' s ' through ‐ ‐ ‐‐‐ 사용 ~를 통해 ‐ ‐ ‐ ‐‐ ‐‐‐‐ ‐ ‐ 🎜🎜 }🎜🎜}🎜🎜🎜7. 데이터 삭제🎜🎜🎜🎜delete code>정적 메서드는 데이터를 삭제하고 반환합니다. 현재 모델의 객체 인스턴스🎜🎜🎜destroy
기본 키에 따라 삭제🎜🎜public function delete(){🎜🎜 # 삭제 방법 1🎜🎜 $delete = 물품::where('id',3)->delete( );🎜🎜 #삭제 방법 2🎜🎜 $delete = User::destroy(4);🎜🎜 return $delete ;🎜🎜}🎜🎜🎜TP 모델의 추가, 삭제, 확인, 수정만 가능하다면 Controller
를 실행하여 사용하는 것이 좋습니다. TP 모델에는 많은 기능이 있는데 아래에서 하나씩 소개하겠습니다🎜🎜3. 모델 설정🎜🎜 데이터베이스에 더 잘 적응하기 위해 모델은 해당 데이터베이스 속성을 미리 설정하고 하나의 파일에 하나의 데이터 테이블을 구성할 수 있습니다. 🎜Attribute Description name 모델 이름(데이터 테이블 접미사와 접미사가 없는 테이블 이름과 동일, 기본값은 현재 모델 클래스 이름) table 데이터 테이블 이름 (기본 자동 Get) pk 기본 키 이름(기본값은 id) schema 모델에 해당하는 데이터 테이블 필드 및 유형 type 모델에 필요한 필드 및 유형 자동으로 변환됨 사용하지 않음 데이터 테이블 버려진 필드(배열)
1. 이름 및 테이블
데이터 테이블에 접두사가 없으면 이름 및 테이블 속성 정의에 차이가 없습니다.
class Goods 확장 모델{
protected $name = 'Goods ';
protected $table = 'shop_goods';
공개 함수 select(){
$select = Goods::select();
return $select->toArray();
}
}
2.pk 기본 키 이름을 변경하세요
model. 기본 기본 키는 id
// 기본 키를 shop_id로 변경할 수 있습니다. Try
ALTER TABLE `ouyangke`.`shop_goods`
CHANGE COLUMN `id` `shop_id ` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ' Product ID' FIRST,
DROP PRIMARY KEY,
ADD PRIMARY KEY(`shop_id`) USING BTREE;
class 상품 확장 모델{
protected $name = '상품';
protected $table = 'shop_goods';
protected $pk = 'shop_id';
public function find($id=1){
$find = Goods::find ($id);
return $find->toArray();
}
}
3. schema
모델에 해당하는 데이터 테이블 필드 및 유형을 설정합니다
자동으로 가져옵니다. 기본값(필드 유형 포함)이지만 자동 획득으로 인해 쿼리
스키마 속성이 정의되면 전체 데이터 테이블 필드 유형을 정의해야 합니다
유형은 PHP 데이터 유형에 따라 정의됩니다. json 유형이므로 json
class Goods extends Model {
protected $name = 'Goods';
protected $table = 'shop_goods';
protected $pk = '로 직접 정의할 수 있습니다. shop_id';
protected $schema = [
'shop_id' => 'int',
사용 ' ‐ ‐ ‐ ‐ ‐ ‐ 'cat' => 'int',
out out off out out ‐ ‐‐ ‐ to 'stock' => 'int',
'status' => 'int',
'add_time' => 'int'
];
자동으로 변환되어야 하는 필드 유형의 경우 유형 속성을 사용할 수 있습니다
protected $type = [
] 'shop_id' => 'int'
];
public function select(){
$select = 상품::select();
+ protected $pk = 'shop_id'; protected $disuse = [ '할인',
'재고'disuse
] ; 공개 기능 select(){
$select = 상품::select();
~ ‐‑ 의 ‐ ‐ ‐ ‐ing return $select->toArray();
Property Description suffix 데이터 테이블 접미사(기본값은 비어 있음) connection 데이터베이스 연결(기본값은 데이터베이스 구성 읽기) query 모델이 사용하는 쿼리 클래스 이름 필드 필드 목록 (배열)은 필드가 쓰기를 허용하는 필드 목록 (배열)이 필드가 대체 민감도 (기본값이 사실이든) json 필드를 JSON 데이터로 설정 jsonType JSON 필드 유형 설정 jsonAssoc JSON 데이터 반환 배열 설정 autoWriteTimestamp 생성 및 업데이트된 타임스탬프를 자동으로 작성 필드(기본값은 꺼짐) createTime 타임스탬프 필드 생성 updateTime 업데이트 타임스탬프 필드 deleteTime 은 일시 삭제 마커 필드를 정의하는 데 사용됩니다. def aultSoftDelete 정의 일시 삭제된 필드의 기본값 4. 모델의 주요 기능
1. Getter
getter의 기능은 모델 인스턴스의 (원본) 데이터를 자동으로 처리하는 것입니다.
네이밍 규칙: get + 필드 이름 + Attr< /code>get + 字段名 + Attr
字段名是数据表字段的驼峰转换
class Goods extends Model{
public function index(){
$find = Goods::find(10);
echo $find->status;
return $find->toArray();
}
public function getStatusAttr($v){
$status = [
1=>'开启',
2=>'关闭'
];
return $status[$v];
}
}
2、修改器
修改器的主要作用是对模型设置的数据对象值进行处理
命名规则: set + 字段名 + Attr
class Goods extends Model{
public function index(){
$create = Goods::create([
'cat' => 3.33,
'title' => '新商品',
'price' => '59.99',
'add_time' => time()
]);
return $create;
}
public function setCatAttr($v,$all){
// $all 全部参数
return (int)$v;
}
}
3、搜索器
搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式
命名规则: search + 字段名 + Attr
필드 이름은 데이터 테이블 필드의 카멜 표기법 변환입니다class Goods extends Model{ public function index(){ $find->status; ㅋㅋㅋ ,,,,,,,,, 켜기',
2=>'닫기'
~ 값이 처리됩니다
. 규칙: set + 필드 이름 + Attr
class Goods 확장 모델{
public function index(){
🎜 $create = Goods::create ([🎜🎜 > > > time()🎜🎜 ]);🎜🎜 $create 반환 > 🎜🎜🎜검색기의 기능은 필드(또는 검색 식별자)의 쿼리 조건 표현을 캡슐화하는 것입니다. 🎜🎜🎜🎜명명 규칙: 검색 + 필드 이름 + 속성
🎜🎜 🎜🎜🎜class 상품 확장 모델{🎜🎜 공용 함수 index(){🎜🎜 $select = 상품::withSearch([' title'],[🎜🎜 ]) -> ;select();🎜🎜 ,,, ,,,,,,,,,,, $v }🎜🎜}🎜🎜🎜4 .데이터 확인🎜데이터 세트가 비어 있는지 판단하려면 empty
를 직접 사용하여 판단할 수 없습니다. empty
判断
必须使用数据集对象的 isEmpty
데이터 세트의 isEmpty
메소드를 사용해야 합니다. 판단 대상 class Goods 확장 모델{ public function index(){ $select = Goods::where('title','1')->select(); if( 비어 있음($select)){ 에코 111;
5. 오른쪽 목록이 모델 예시model code
namespace appmodel;use thinkModel;use thinkfacadeDb; class Goods 확장 모델{
protected $name = 'Goods';
protected $table = 'shop_goods';
public function get_all($ where,$order='add_time DESC',$p=1,$ 총=10){
$count = 상품::where($where)->count();
$list = 상품::where($where)
~ > )){
return null; 'cat'] = Db::table(' shop_cat')-> where('id',$data_v['cat'])->value('name'); /$total),
$status = [
1=> ;'켜짐',
2=> ;'끄기'
귀국 날짜('Y-m-d',$v);
}
}
컨트롤러 코드공용 함수 인덱스(){
$title = '商城';
$login = '欧阳克';
# 左侧菜单
$menu = Db::table('shop_menu')-> where('fid',0)->select();
$left = [];
foreach($menu as $menu_k=>$menu_v){
$left[$menu_k] = $menu_v ;
$left[$menu_k]['lists'] = Db::table('shop_menu')->where('fid',$menu_v['id'])->select();
}
# 右侧列表
$param = Request::param();
if(isset($param['status']) && $param['status'] == 1){
$where ['상태'] = 1;
}else if(isset($param['status']) && $param['status'] == 2){
$where['status'] = 2;
}else{
$where = true;
}
$p = isset($param['p']) ? $param['p'] : 1;
$db = 새 상품();
$order = [
'add_time DESC',
'id DESC'
];
$오른쪽 = $db->get_all($where,$order,$p,5);
보기::할당([
'title' => $title,
'login' => $login,
'왼쪽' => $left,
'오른쪽' => $right['data'],
'count' => $right['count'],
'p' => ; $p,
'status' => isset($param['status']) ? $param['status'] : 0
]);
return View::fetch();
}
html代码
{$right_v.status} {$right_v.add_time}
六、模型事件
-
模型事件是指는 进行模型的查询및写入操事的时候触发的操事行为
模型事件只에서 调用模型的方法生效,使用查询构造器操作是无效的
ㅋㅋㅋ 2
before_insert 전에 추가 onBeforeInsert 3 after_insert AfterInsertonAfterInsert 4 before_update BeforeUpdateonBeforeUpdate 5 after_update 업데이트 후onAfterUpdate 6 before_write 쓰기 전onBeforeWrite 7 after_write 쓰기 후onAfterWrite 8 before_restore beforerestore onBeforeRestore 11 after_restore AfterRestore onAfterRestore namespace app\model;
use think\Model;
class Goods extends Model{
public function one_update(){
$update = Goods::update(
['price'=>'99.99'],
['id'=>22]
);
return $update;
}
# 执行更新操作,就会之下onBeforeUpdate方法
public static function onBeforeUpdate($goods){
print_r($goods->price);
return true;
}
}