V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  qiujin  ›  全部回复第 1 页 / 共 1 页
回复总数  18
2018-09-03 14:22:15 +08:00
回复了 EDDYCJY 创建的主题 问与答 PHP 有做 RPC Server,且支持 Protobuf 的吗?
写过简单的 PHP Grpc Server,如果不涉及到数据流等在 fpm 环境下不适合实现的功能外,用 PHP 实现一个简单的 Grpc Server 还是可以的。
https://github.com/qiu-jin/phpegg/blob/master/framework/core/app/Grpc.php
2017-10-23 18:27:55 +08:00
回复了 LiuXuFei 创建的主题 PHP 有什么合适的包能接收 json-rpc 的异步推送吗?
问题重点是 websocket,首先需要个 websocket client 吧。

用 PHP 写过 jsonrpc 的应用服务,使用通知回调方法也可以实现类似需求,http://www.phpegg.com/doc/app-jsonrpc.html
2017-10-18 20:14:02 +08:00
回复了 Bazingawang 创建的主题 Coding Coding 动态 Pages 内测邀请:一键运行你的 PHP 程序
qiujin
申请试试
@tanszhe 嗯,是用预处理处理的参数,只是 LOG 打印 SQL 时采用拼接的方式,这样看起来更直观。
2017-10-15 19:25:36 +08:00
回复了 gouchaoer 创建的主题 PHP 恨 laravel 的老外
恨谈不上,就是觉得有点不合适,所以我自己开了个坑 http://www.phpegg.com
使用 beanstalkd 这种有延迟任务功能的队列
文档已经整理放到新的站点 http://www.phpegg.com
@vindurriel with 语句是逻辑联表查询,一次查询的确需要执行 1+1 次 SQL,它类似于 ActiveRecord 型的 ORM 中的 hasMany 设定,相对 ORM 优点是不用生成大量对象也不用写 model 模型代码定义每个表和表之间关系。

写一个简单的例子,像 v2 这样的社区有多个主题贴子,每一个主题也有多个回复评论,如果我一次想要查询自己所有的主题贴子和所有的主题贴子的回复评论回复怎么办?

用常规写法,先查询所有的主题贴,再循环查询每个主题贴的回复评论

$posts = $this->db->post->where('name', 'qiujin')->find();
foreach ($posts as $i => $post) {
$posts[$i] = $this->db->comment->where('post_id', $post['id'])->find();
}
return $posts;

使用 with 语句一行代码即可。

return $this->db->post->where('name', 'qiujin')->with('comment')->find();

对比就可以知道常规写法不仅啰嗦,而且低效,因为常规写法执行了 1+N 次 SQL。

而 with 语句简洁明了,查询 post 数据后,在把 post 数据中的 id 抽出组成 where in 查询 comment 表数据,最后把 comment 数据组合分配给 post 返回,其中只执行了 1+1 次 SQL,比常规写法效率高很多。
去搜了下 Zend DB 子查询的实现 https://stackoverflow.com/questions/1340564/writing-a-subquery-using-zend-db
得分最高的回答的演示代码的其中一行。
->where('sles.id = (SELECT MAX(id) FROM sle_instances WHERE sle_id = sles.id)')
我去这算什么,这个直接写 SQL 有什么区别。
@explon 没怎么用过 zendframework,特意跑去看了下 https://docs.zendframework.com/zend-db/,还真没看出来 Zend DB 在联表查询方面强在哪儿(且不说它实现过于臃肿),query builder 常用的 select where order limit 等方法大部分框架和库都大同小异不一定谁比谁强,至于联表查询我找了半天找到了一个 join,看看它的写法$select -> join('table1','table2.field2= table1.field1'),table2.field2= table1.field1 是什么鬼到底是原生 SQL 还是 query 语法,混在一起不伦不类,还不如直接写 SQL,还有子查询 一对多 多得多的联表查询方法在哪我也没找到。
@xeis 可以的,可以把数据库部分单独拿出来用(在 framework/driver/db ),这个框架耦合度很低,各应用模式之间没有任何关联,只用到一种的话其它的都可以干掉,多个驱动之间关联也少,不用的都可以干掉。

路由也是可选选项,默认都是使用 url 默认调度,模板也是可选选项,直接用 php 没任何问题。
@vincenth520 谢谢支持
@huntzhan 这是当然的啦,readme 也有介绍,我觉得还能算是特点吧,虽说不是很突出,不过一口也吃不成胖子,得持续更新。另外大家也不要纠结什么蛋不蛋的了啊,我明明写了一大坨 Query Builder 联表查询介绍,好像被忽视了。
@xeis 先看项目主页的 readme,后面会迁移到 http://docs.phpegg.com
@wolong 换了个名字就叫 phpegg 吧
@mcfog 谢谢支持哈,刚开始先就放一块了,不然太分散也没人关注,以后在拆分。
@cxh116 对,单元测试也很重要,但工作量也不小,后续会慢慢补上。
@huntzhan 看来还是得想一个好听的名字,不能叫 my_php_framework。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2933 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 14:12 · PVG 22:12 · LAX 07:12 · JFK 10:12
Developed with CodeLauncher
♥ Do have faith in what you're doing.