Laravel 实战开发知乎:使用 Repository 模式
打赏作者

dope2008

感觉好处不大,只是包多一层

colder

也有好处啊,可以重用啊。不过我的问题是:可以把这些方法直接写到Model里吗?

yurenzhen 回复 colder

可以的。如果实在不喜欢的话可以放到model里。不过我觉得学过java的可能更喜欢这种方式。

a4922291 回复 colder

一个方法可能用到多个Model,你在维护的时候要去多个Model中维护,但是采用Repository的话会方便很多,你只需要去找Repository方法就可以解决一个控制器里所有的Model

yff

请问下jelly,你一般在项目里面,repository是自己手写,还是用github上面,那个比较有名的包 l5-repository

JellyBool 回复 yff

目前来说,自己怼一下

xiaofengzhi 回复 JellyBool

能不能把那个style.css的样式文件发一下

JellyBool 回复 xiaofengzhi
a.topic {
    background: #eff6fa;
    padding: 1px 10px 0;
    border-radius: 30px;
    text-decoration: none;
    margin: 0 5px 5px 0;
    display: inline-block;
    white-space: nowrap;
    cursor: pointer;
}

a.topic:hover {
    background: #259;
    color: #fff;
    text-decoration: none;
}

这个么

xiaofengzhi 回复 JellyBool

嗯嗯,我在下一讲的时候知道的,已经写好了,谢谢谢谢啦

hard88

额,我又报错了,视频中每一步都是跟着做的,而且这部分步骤也很少。错误信息:

ErrorException in QuestionsController.php line 22:
Object of class App\Repositories\QuestionRepository could not be converted to string

JellyBool 回复 hard88

仔细看看吧,感觉又是写错了什么的。以后顺手贴一下代码,然后问之前直接 google 一下就行了

hard88 回复 JellyBool

解决了,$…以后这种问题我会更仔细一些。麻烦了-。-

lg23

这里用Repository模式, 同我之前用的service+store层差不多,我原来的service层专门处理代码逻辑,store执行数据库操作

能量熊1024

低耦合,后期如果想要修改查询结果,只需去修改RepositoryModel一处就行了,而不要去控制器到处找代码,到处修改

b545798400

model就是一种repository把,没有必要再写一个repository文件

a4922291

我这边style.css导入到app.scss并执行gulp命令后 并没有加载出CSS样式,gulp我不太熟悉,虽然查找了文档但还是不知道问题出在哪里!求JellyBool解惑

a4922291
const elixir = require('laravel-elixir');

require('laravel-elixir-vue-2');
require('laravel-elixir-webpack-official');
/*
 |--------------------------------------------------------------------------
 | Elixir Asset Management
 |--------------------------------------------------------------------------
 |
 | Elixir provides a clean, fluent API for defining some basic Gulp tasks
 | for your Laravel application. By default, we are compiling the Sass
 | file for our application, as well as publishing vendor resources.
 |
 */

elixir(mix => {
    mix.sass('app.scss')
    .webpack('app.js');

    mix.version(['js/app.js','css/app.css'])
});
JellyBool 回复 a4922291

你用的 laravel 5.4 吧, 先看看 5.4 新特性的那个 laravel-mix 视频。

以后贴代码的时候,请使用 markdown 排版一下。

noikiy

我写过thinkphp的model 里面有许多的byId、create、delete、getData的方法然后在 任何的model 和控制中 可以通过D方法去调用
这里respository我的理解是
已经分成三层了 我的理解是
controller => 实现方式
model => 表与表的关系 字段规则 发送邮件重写 还有trait的引用
repository => use对应的model了 然后控制器里就可以用里面的逻辑了
验证表单写在app/Http/Requets 里面

不知道我的理解是不是太片面了

noikiy 回复 zhouxiaoshuai3

时间长了 我觉得这种把业务分到 model外的层很好 model 的意义就很明显了

zhouxiaoshuai3 回复 noikiy

这样遵循了SOLID原则,有利于项目后期的扩展和维护。个人感觉点灯坊的这位大神很多文章都很不错,对我们开发者很有帮助。对了,thinkphp我也用过,像TP5文档中作者也提到了分层,https://www.kancloud.cn/manual/thinkphp5/118108
有兴趣也可以看一下这个,它分成了数据层,逻辑层和服务层。其大体思想是一样的

noikiy 回复 zhouxiaoshuai3

好的!!
对tp5也是可以定义个service层来专门写业务层 , 其实名字随便写的主要是这个思想,

noikiy 回复 zhouxiaoshuai3

laravel 的机制很吊写 有个中间件 ,我看用什么框架都差不多 主要还是思想

zhouxiaoshuai3 回复 noikiy

是的。框架只是个工具,思想最重要。。。

rufo775397252

中间表的名字顺序可以更换吗?

JellyBool 回复 rufo775397252

这个是可以自定义的,你声明关系的时候指定表名就行,不然默认就是视频那样

rufo775397252 回复 JellyBool

我的意思是多对多关联时中间表是user_tag和tag_user是都可以吗?因为tag和user都是多对多,是不是表名是这2个都可以不用指定表明

JellyBool 回复 rufo775397252

不是的,是另外一个的话,应该是要指明的

swarm163

这个模式不错,有点类似DAO 数据层