惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
GbyAI
GbyAI
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
腾讯CDC
博客园 - Franky
Engineering at Meta
Engineering at Meta
C
Check Point Blog
T
The Blog of Author Tim Ferriss
有赞技术团队
有赞技术团队
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog
I
InfoQ
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
Last Week in AI
Last Week in AI
S
SegmentFault 最新的问题
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学

zodream梦想开源/个人编程日记

文件解析笔记-zodream梦想开源/个人编程日记 密码本开发笔记之读写与保存-zodream梦想开源/个人编程日记 SkiaSharp 把 pixel byte[] 转成 SKBitmap-zodream梦想开源/个人编程日记 nas 使用 Docker 安装 gogs-zodream梦想开源/个人编程日记 复制 android 手机中的文件到电脑-zodream梦想开源/个人编程日记 周报:寻找优质的周刊-zodream梦想开源/个人编程日记 开发日志:对Markdown的代码块新增引用来源支持-zodream梦想开源/个人编程日记 周报:怎么写技术类的教程文章-zodream梦想开源/个人编程日记 css display:flex 布局尺寸超出问题-zodream梦想开源/个人编程日记 周报:SEO优化的思考-zodream梦想开源/个人编程日记 Edge 浏览器不适用 Edge Image Viewer 打开图片 -zodream梦想开源/个人编程日记 SEO 学习笔记(一) 内容来源-zodream梦想开源/个人编程日记 PHP 实现双因素身份认证(2FA)-zodream梦想开源/个人编程日记 WPF MVVM 获取List 多选数据-zodream梦想开源/个人编程日记 Burp Suite 抓包-zodream梦想开源/个人编程日记 使用 indexnow 注意事项-zodream梦想开源/个人编程日记 Godot 使用字体图标 例如: Iconfont、FontAwesome-zodream梦想开源/个人编程日记 angular 15 对指定页面进行访问限制-zodream梦想开源/个人编程日记 CSS 使用 column-count 实现瀑布流出现内容分割的解决办法-zodream梦想开源/个人编程日记 input 确认按键事件在手机端不生效-zodream梦想开源/个人编程日记 C# 使用socket 进行通讯-zodream梦想开源/个人编程日记 Maui开发中Windows应用开启管理员权限-zodream梦想开源/个人编程日记 Maui 中自定义控件-zodream梦想开源/个人编程日记 angular 14 使用 ng-template 实现tree 结构显示-zodream梦想开源/个人编程日记 c# 动态安装和卸载dll-zodream梦想开源/个人编程日记 慎用 CompositionTarget.Rendering-zodream梦想开源/个人编程日记 c# 重写 c++ 程序笔记:数据初始化-zodream梦想开源/个人编程日记 源码编译 aseprite-zodream梦想开源/个人编程日记 记录一下字符串分隔split各语言之间的不同-zodream梦想开源/个人编程日记 c# Gzip解码无头内容-zodream梦想开源/个人编程日记
重新规划数据库读取-zodream梦想开源/个人编程日记
zodream · 2019-04-01 · via zodream梦想开源/个人编程日记

大致分为三层

第一层数据库实体(Entity)

文件夹位置 Domain\Entities

主要内容:包含数据库名,表名,主键、字段名、字段验证

保存最原始数据,直接读取的也是最原始数据

第二层数据实体(Model)继承数据库实体

文件夹位置 Domain\Models

主要内容:关联表、追加字段、隐藏显示字段

值转化,

第三层数据仓库(Repository)获取数据实体

文件夹位置 Domain\Repositories

主要内容:读取方法,更新实体

包含获取哪些值,返回数据实体

问题

这样文件变得更复杂、传出来的值都会固定、适应不同接口场景

思考

到底在哪一层操作关联数据库?

使用

<?php
namespace Domain\Entities;
/**
 * 
 * @property integer $id
 * @property string $name
 * */
class User {
    public static function tableName() {
        return 'user';
    }

    protected function rules() {
        return [
            'name' => 'required|string:0,100',
        ];
    }

    protected function labels() {
        return [
            'id' => 'Id',
            'name' => '昵称',
        ];
    }
}

1234567891011121314151617181920212223242526

<?php
namespace Domain\Models;

use Domain\Entities\User as UserEntity;

class User extends UserEntity {

    protected $hidden = ['password'];
}

12345678910

<?php
namespace Domain\Repositories;

use Domain\Models\User;

class UserRepository {

    public function get($id) {
        return 
    }
}

123456789101112

<?php
namespace Service;

use Domain\Models\User;

class UserController {

    protected $user;

    public function __construct(UserRepository $user) {
        $this->user = $user;
    }

    public function indexAction($id) {
        return $this->render($this->user->get($id));
    }
}

123456789101112131415161718

转载请保留原文链接: https://zodream.cn/blog/id/48.html