鍍金池/ 問答/PHP/ 如果是對一張表的操作,有必要在對應(yīng)的model里面寫一個接口嗎

如果是對一張表的操作,有必要在對應(yīng)的model里面寫一個接口嗎

比如說我的controller是這樣的

use App\Model\User;
class UserController extends BaseController
{
    protected $model;
    public function __construct(User $user)
    {
        $this->model = $user;
    }
    public function updatePhone(Request $request)
    {
        $id = $request->id;
        $phone = $request->phone;
    }
}

函數(shù)updatePhone的用途就是更新用戶的手機。在這一點上我不知道怎么辦好,我可以這樣寫

$res = $this->model->where('id',$id)->update('phone',$phone)

因為這個邏輯只是更新用戶的手機,只是對user表的單表操作,一般的框架里都有現(xiàn)成的對單表curd的函數(shù)。
我還可以在controller里這樣寫

$res = $this->model->updatePhone($id, $phone);

然后在user model里面加一個接口

public function updatePhone($id,$phone)
{
    return $this->where('id',$id)->update('phone',$phone);
}

不知道這兩種寫法哪一個好一點?

回答
編輯回答
默念

MVC 分層的好處就是隔離,Controller 負(fù)責(zé)處理請求,Model 負(fù)責(zé)和數(shù)據(jù)庫進行 CURD 交互,View 負(fù)責(zé)顯示數(shù)據(jù)。如果以后業(yè)務(wù)擴展,User 表新增 email、nickname 等也會發(fā)生更新的字段,這時候再在 Model 中寫 updateEmail 和 uodateNickname,代碼的復(fù)用性就很低了。
所以我覺得放到 Controller 中處理,更新指定的字段為指定的值,會更靈活。

2018年4月10日 23:50
編輯回答
傻丟丟

在model中加接口,理由就是規(guī)范,比如model的bug以后只需要去model層分析就可以,不然controll也有 ,項目大了后,會很亂

2018年7月12日 08:24
編輯回答
笑浮塵

如果這段代碼經(jīng)常被其他controller用到,封裝到model里;只是當(dāng)前業(yè)務(wù)邏輯用到,寫到controller里。

2017年9月1日 18:46
編輯回答
巫婆

建議還是放到Model中,將業(yè)務(wù)邏輯和數(shù)據(jù)操作分離開,這樣項目大了后調(diào)試或者擴展都會很清晰

2017年12月18日 22:53
編輯回答
拼未來

放在model吧 你可以把代碼寫成可以更新多個字段的 自由控制傳參 像2樓上說的 每次都寫一個肯定不好 但是寫一個可以更新一個或多個字段不是很好嘛 又能滿足規(guī)范 又不會有重復(fù)的工作

2018年1月22日 21:05
編輯回答
夏木

新建一個service層吧,位于model與controller之間

2018年1月21日 02:00