laravel mysql save 后 查看 受影响行数_swoft2教程系列-mysql模型
無論是基礎查詢還是高級查詢,實際都會依賴表實體,一個表字段和一個類屬性的關系通過映射實現,而對類的操作也就相當于在對數據表操作。Swoft 2.x 中實體類對比 1.x 使用起來更簡單,它兼容 Builder 查詢構造器所有的方法,使用實體類和查詢構造器的方法一致。
實體類不需要自己編寫,用 swoft 提供的命令行操作實現即可
注意
swoft的模型就是實體 Entity ,一個實體的結構對應一張數據表的結構。每一個實體的實例就是對應數據庫的一條記錄,因此不能使用 @Inject 注入。
創建模型實體
php bin/swoft entity:create --table=products,products_class --pool=db.pool 通過命令生成,命令參數:
- exclude STRING Expect generate database table entity, alias is ‘exc’
- field_prefix STRING 別名 “fp”,去除字段前綴,如:user_info 使用參數 —fp=user 生成的字段竟會變成 info
- path STRING 生成實體存放路徑,默認:@app/Model/Entity
- pool STRING 選擇數據庫連接池,默認:db.pool
- remove_prefix STRING 別名 “rp”,去除表前綴生存實體,如:user_info 表生成的文件是 UserInfo.php,使用參數 —rp=user 生成是 Info.php
- table STRING 選擇要生成實體的數據表,—table=products,member_info 會生成兩個指定表的實體
- table_prefix STRING 別名 “tp”,生成實體去除表前綴如 table_prefix=products @Entity(table=”products_class”) 去除后 @Entity(table=”class”)
- td STRING 生成實體的模版,默認: @devtool/devtool/resource/template
- -y STRING 自動確認類似linux安裝命令的 -y
實體注解
@Entity
通過注解標簽 @Entity 指定類為實體類。
參數說明:
- table:需映射的數據庫表名(必填)
- pool:連接池,默認為 db.pool
@Column
通過注解標簽 @Column 指定成員屬性為字段名。如果字段未添加 @Column 標簽,那么在查詢時該列(字段)不會展示。即使新增字段也不會影響生產環境。
參數說明:
- name:需映射的數據表字段名。默認值為成員屬性
- prop:字段別名,僅在調用 toArray 方法時被轉換。使用 where 等子方法時仍需使用數據庫字段名
- hidden:字段是否隱藏。僅在調用 toArray 方法時會被隱藏,但并不影響通過 getter 方法獲取。可以通過調用實體 addVisible 方法取消隱藏
說明:所有字段屬性,必須要有 getter 和 setter 方法,你可以使用 PhpStorm 快捷鍵 Alt + Insert (macOS 為 command + N 或 control + enter)根據屬性快速生成 getter 和 setter 方法。
若表字段名存在下劃線,類屬性需以 小駝峰 方式定義。例:字段名為 user_name,則屬性應當寫為 $userName。
@Id
該注解標簽指定成員屬性為主鍵。一個實體類僅能設置一個 @Id 注解標簽。
參數說明:
- incrementing:是否為遞增主鍵,默認為 true
Prop 操作
- Swoft 版本需 >= 2.0.6
模型支持使用 prop 直接操作,在上方示例實體類中,數據表字段 user_desc 的 prop 為 udesc,Swoft 底層會自動轉換,所以并不響應我們使用。
模型常用方法
獲取模型方法
$member = new Member($data);
$member = Member::new($data);模型寫入數據庫方法
// 調用save()保存
$member = new Member();
$member->setUsername($username);
$member->setPasswd($passwd);
$res = $member->save();
// 調用save()保存,在獲取模型的時候填充數據
$member = Member::new($data);
$res = $member->save();
// 調用save()保存,使用fill填充數據
$member = Member::new();
$member->fill($data);
$res = $member->save();
// insertGetId() 保存獲取寫入數據庫返回的id
$res = Member::insertGetId($data);模型獲取數據方法
// 獲取所有數據,只獲取id、username字段
Member::all(['id','username'])->toArray();
// 獲取所有數據,只獲取id、username字段
Member::get(['id','username'])->toArray();
// 根據逐漸id獲取單條數據
Member::find(1)->toArray();
// 跟all和get相比,更節省內存
Member::chunkById(10,function($member){/** @var Member $m */foreach($member as $m){echo $m->getUsername()."n";}
});模型更新數據方法
Member::find(1)->update(['passwd' => $passwd]);
// 查找 username 等于 sunny 的記錄,替換成 sunnt007,如果記錄存在會更新,不存在新增
Member::updateOrCreate(['username'=>'wike'],['username'=>'wikenew']);
// 根據主鍵id更新數據
Member::modifyById(1,['username'=>'wike']);
// 查找 username 等于 sunny001 的記錄,替換成 002
Member::modify(['username'=>'wike'],['username'=>'wikenew']);刪除方法
// 先執行find然后再delete
Member::find(1)->delete() 聚合查詢方法
Member::min('id');
Member::max('id');
Member::sum('id');
Member::avg('id');
Member::count('id');其他常用方法
來源:https://8code.net/index/index/article/id/60以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要
PHP進階架構師>>>視頻、面試文檔免費獲取?shimo.im或 者關注咱們下面的知乎專欄
PHP架構師圈子?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的laravel mysql save 后 查看 受影响行数_swoft2教程系列-mysql模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海欢乐谷年卡可以给别人用吗
- 下一篇: 类似《辛德勤名单》的影视剧是?