Yii2的model中应该包含哪些代码?
model中除了包含数据验证及基本的删除外,还能写哪些代码?如果要进行多行添加、删除、更新,数据预处理需要根据多种条件进行判断,同时要进行多个表的操作(并不存在一对多、多对一这样的关系),这里有很大一部分代码,写到controller中感觉很大,写在model感觉有时还不行,这些难道都写在helper里面,还是有其他好的地方来组织?
回复内容:
model中除了包含数据验证及基本的删除外,还能写哪些代码?如果要进行多行添加、删除、更新,数据预处理需要根据多种条件进行判断,同时要进行多个表的操作(并不存在一对多、多对一这样的关系),这里有很大一部分代码,写到controller中感觉很大,写在model感觉有时还不行,这些难道都写在helper里面,还是有其他好的地方来组织?
凭感觉和经验吧,我的回答纯粹是抛砖。
Yii2里面没有什么特别的model概念,包含文档和示例里面都很少提到这个东西,我感觉他们就是希望一切都用ActiveRecord对象(甚至form都是继承于此)就够用了,但是实际上这是很糟糕的事情,因为当多表联动的时候对象边界就会变得很模糊。然而实际上我在某个项目中自定义了model层后对方竟然还用这种写法不是Yii2推荐的为由拒付了项目尾款,所以我更是对此吐槽不已。
在我看来,ActiveRecord对象是对数据表的映射,它应该只处理内部的事情,这无疑就清晰了很多。它就是数据表的实体映射,不是model。
但是,很多时候多个表之间必然是联动的,如创建订单的时候必然要同时操作订单详情,那么这种逻辑控制应该是在model中完成。
此外,如果Controller和ActiveRecord分别由不同的开发者完成时,model层也很重要,可以用于双方的耦合,因为允许在Controller中直接调用ActiveRecord实际上是挺危险的。
至于你觉得Model不够用,还可以选择 Service, Plugin, Filter等,而不只仅限于Helper。
补充:貌似还一直没扣题呢,哈哈
我认为Model是在数据表基础上更为复杂的一种数据模型,往往表示了开发者对对象的理解与定义,例如我们有订单表和订单详情表,但是这不是对象级别的数据,而OrderModel则是对订单对象的声明,一个订单不但有订单信息,同时包含订单详情,甚至可能关联物流、发票等。
我在Model中通常会包含
常量定义,如果需要设置一些特定标示的话
事物处理,如果需要多个ActiveRecord联动的话
简单CRUD,如果需要隔离ActiveRecord的话,即约定Controller不去直接调用此类型的对象,而是必须通过model中封装的方法
其它,我觉得Helper主要是给前端用的,所以一个方法常用但是前端不用,那么可以放在model里面;此外,有的方法可能不好确认其归属,即Amodel需要,Bmodel也需要,也简单,两处都声明,只不过一个是具体逻辑,另一个仅仅引用而已。
你可以使用行为(Behaviors).
把模棱两可的共用代码 放在行为里。
类似于Traits。
或者组件。Components
对象的数据属性和行为。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.
