php larval開發規范,數據模型 |《 Laravel 項目開發規范 5.5》| Laravel China 社區

本文檔最新版為 7.x,舊版本可能放棄維護,推薦閱讀最新版!

放置位置

所有的數據模型文件,都 必須 存放在:app/Models/ 文件夾中。

命名空間:

namespace App\Models;

User.php

Laravel 5.1 默認安裝會把 User 模型存放在 app/User.php,必須 移動到 app/Models 文件夾中,并修改命名空間聲明為 App/Models,同上。

為了不破壞原有的邏輯點,必須 全局搜索 App/User 并替換為 App/Models/User。

使用基類

所有的 Eloquent 數據模型 都 必須 繼承統一的基類 App/Models/Model,此基類存放位置為 /app/Models/Model.php,內容參考以下:

namespace App\Models;

use Illuminate\Database\Eloquent\Model as EloquentModel;

class Model extends EloquentModel

{

public function scopeRecent($query)

{

return $query->orderBy('created_at', 'desc');

}

}

以 Photo 數據模型作為例子繼承 Model 基類:

namespace App\Models;

class Photo extends Model

{

protected $fillable = ['id', 'user_id'];

public function user()

{

return $this->belongsTo(User::class);

}

}

命名規范

數據模型相關的命名規范:

數據模型類名 必須 為「單數」, 如:App\Models\Photo

類文件名 必須 為「單數」,如:app/Models/Photo.php

數據庫表名字 必須 為「復數」,多個單詞情況下使用「Snake Case」 如:photos, my_photos

數據庫表遷移名字 必須 為「復數」,如:2014_08_08_234417_create_photos_table.php

數據填充文件名 必須 為「復數」,如:PhotosTableSeeder.php

數據庫字段名 必須 為「Snake Case」,如:view_count, is_vip

數據庫表主鍵 必須 為「id」

數據庫表外鍵 必須 為「resource_id」,如:user_id, post_id

數據模型變量 必須 為「resource_id」,如:$user_id, $post_id

利用 Trait 來擴展數據模型

有時候數據模型里的代碼會變得很臃腫,應該 利用 Trait 來精簡邏輯代碼量,提高可讀性,類似于 Ruby China 源碼。

借鑒于 Rails 的設計理念:「Fat Models, Skinny Controllers」。

存放于文件夾:app/Models/Traits 文件夾中。

Repository

絕不 使用 Repository,因為我們不是在寫 JAVA 代碼,太多封裝就成了「過度設計(Over Designed)」,極大降低了編碼愉悅感,使用 MVC 夠傻夠簡單。

代碼的可讀性,維護和開發的便捷性,直接關系到程序員開發時的愉悅感,直接影響到項目推進效率和程序 Debug 的速度。

關于 SQL 文件

絕不 使用命令行或者 PHPMyAdmin 直接創建索引或表。必須 使用 數據庫遷移 去創建表結構,并提交版本控制器中;

絕不 為了共享對數據庫更改就直接導出 SQL,所有修改都 必須 使用 數據庫遷移 ,并提交版本控制器中;

絕不 直接向數據庫手動寫入偽造的測試數據。必須 使用 數據填充 來插入假數據,并提交版本控制器中。

全局作用域

Laravel 的 Model 全局作用域 允許我們為給定模型的所有查詢添加默認的條件約束。

所有的全局作用域都 必須 統一使用 閉包定義全局作用域,如下:

/**

* 數據模型的啟動方法

*

* @return void

*/

protected static function boot()

{

parent::boot();

static::addGlobalScope('age', function(Builder $builder) {

$builder->where('age', '>', 200);

});

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277387.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277387.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277387.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

課程總結

大一的我初次學習JAVA,盡管以前也有所了解過但是還是覺得有點難,這個和c語言相似但是又有很多的不同,比如關鍵字什么的,一個學期下來現在回望真的感覺學到的并不是很多,可能是我上課的時候喜歡分神吧,盡管在…

記錄工作中遇到的問題

只要在編程,遇到問題是肯定的,不過經常性遇到弱智的問題可就不太好了。把問題記錄下來,提醒自己 問題 主機解析異常,內部多個系統,系統的登錄需要從CAS中心得到登錄信息,如果失敗會提示登錄失敗。今天一直跳…

php7安裝詳解_,PHP7 redis擴展安裝詳解

1、安裝redis(1)下載:https://github.com/phpredis/phpredis/tree/php7 或下載http://pan.baidu.com/s/1i5DFrjn用samba掛載導進去(2)yum -y install m4 autoconf # 安裝依賴(3)unzip phpredis-php7.zip # 解壓(4)cd ./phpredis-php7 # 進入目錄(5)phpize #用php…

python之_init_函數的簡介

1、每個package中都必須包含一個_init_.py文件除了不需要加載模塊的 它方便在外部統一調用,和在內部互相調用,它可以為空,當為空時,作用是將這個文件夾下的內容當作包執行,便于解釋器區分執行。 2、定義類的時候&#…

22. Generate Parentheses

題目描述: Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n 3, a solution set is: ["((()))","(()())","(())()","()(())","()()…

php explain type等級,mysql中explain分析sql詳解

Explain舉例mysql> explain select * from event;—-————-——-——————————————————-| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |—-————-——-——————————————————-| 1 | SIMPL…

es6中的塊級作用域

塊級作用域 凡是帶{}都是塊級作用域,if(){} for(){} 對象{} 1.在塊級作用域下,var 和function跟在window下一樣, function有個特殊的一點,在塊級作用域下會提前聲明,不會提前定義 2.在塊級作用域下 let和const聲明的變…

Windows10安裝Ubuntu子系統+docker教程說明

說明 微軟和Ubuntu深入合作推出了基于win桌面運行Ubuntu系統.為了滿足開發同學也在win下也可以使用ubuntu的開發環境.通過利用win上的Linux子系統Ubuntu16.04能否安裝docker并正常使用 復制代碼 首先在安裝Ubuntu應用之前,我們要做一些事情,避免安裝和使…

【HDU - 2612】Find a way(bfs)

-->Find a way 直接上Chinese Descriptions: hsj和lsh最近迷上了pokemon go的游戲。在雙十一大物期中考試來臨之前,他們想抓一只稀有土撥鼠來攢攢人品(因為土撥鼠的刷新地點最近來到了哈工程)但是由于土撥鼠過于強大,他的雷霆半…

getMeasuredWidth和getWidth的區別

View的getWidth()和getMeasuredWidth()有什么區別嗎? View的高寬是由View本身和Parent容器共同決定的。getMeasuredWidth()和getWidth()分別對應于視圖繪制的measure和layout階段。getMeasuredWidth()獲取的是View原始的大小,也就是這個View在XML文件中配…

php圖片地址參數錯誤,圖片上傳時一直顯示請求地址錯誤怎么辦

1、出現“請求地址錯誤”的直接原因:圖中$action null2.根本原因:url美化那一節課程,去掉 index.php的.htaccess 文件修改的時候,沒有按照老師的來寫,所以美化url以后獲取不到地址欄參數,導致$action值為n…

C#寫的WebServices可運行于樹莓派

閱讀目錄 Raspkate - 基于.NET的可運行于樹莓派的輕量型Web服務器Raspkate項目演示回到目錄Raspkate - 基于.NET的可運行于樹莓派的輕量型Web服務器 最近在業余時間玩玩樹莓派,剛開始的時候在樹莓派里寫一些基于wiringPi庫的C語言程序來控制樹莓派的GPIO引腳&#x…

[導入]Ms XmlDom 異步裝載Xml文件

Ms XmlDom 異步裝載Xml文件文章來源:http://blog.csdn.net/net_lover/archive/2004/07/07/36015.aspx 轉載于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2004/07/07/816151.html

Django的View(視圖)

Django的View(視圖) 一個視圖函數(類),簡稱視圖,是一個簡單的Python 函數(類),它接受Web請求并且返回Web響應。 響應可以是一張網頁的HTML內容,一個重定向&am…

高質量的期貨研究報告去哪里找?

作者:虎虎的小尾巴鏈接:https://www.zhihu.com/question/25331621/answer/205439281來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。這是個好問題,我曾經或者直到現在我也一直在追求高…

oracle中偏移,怎么對相同的坐標點偏移?

上面說的第三步必須保證每個點不能重復分配,有些難度,還是用過程代碼吧。CREATE TABLE t_offset asselect 1 id,1.001 x,1.002 y, 10 mark from dualunion allselect 2011 id,1.001 x,1.012 y, 31 mark from dualunion allselect 3…

設計模式之--原型模式

1.原型模式定義 原型模式非常簡單,定義如下: 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象 2.通用類圖 原型模式的核心是實現Cloneable接口,此接口為JDK提供的一個標識接口,只有實現了此接口的類才…

搜索目錄里所有文件(包括子目錄)

搜索目錄里所有文件(包括子目錄) 資料來源:http://www.cnblogs.com/jjwwww/archive/2004/09/04/39559.aspx 用到兩個函數ParseDirectory 和CreatePathListvoidParseDirectory(stringpath, stringfilter) { strin…

一張圖理解buffer與cache

轉載于:https://blog.51cto.com/11193863/2169166

oracle服務器不識別tc服務,記一次ORACLE無法啟動登陸事故

打開XSHELL 登陸ORACLE用戶1.sqlplus scott/scott 提示登陸失敗2.sqplus / as sysdba 啟動數據庫提示3.查找日志操作日志:$ORACLE_HOME/startup.log啟動日志:$ORACLE_BASE/diag/rdbms/ora11g/ora11g/trace/alert_ora11g.log (ora11g為SID值)啟動日志如果…