mysql如何把一列数据合并到一起 Laravel使用模型关联关系返回指定列,如何操作?

[更新]
·
·
分类:互联网
4123 阅读

mysql如何把一列数据合并到一起

Laravel使用模型关联关系返回指定列,如何操作?

Laravel使用模型关联关系返回指定列,如何操作?

引言在数据库表的设计时,对不同的功能进行切分,分割为不同的表进行存储。在业务逻辑中,再将需要连接的数据进行整合输出。
今天我们说一说,在Laravel中,如何关联模型,以及制定返回列,以精简返回数据。
学习时间假如有两个模型 User 和 Post,一个用户会发布多个post,也就是一对多的关联关系。在User模型中,指定此关系:
public function post(){ return $this-gthasmany(Post) }
反过来,在Post模型中,必然有一个发布者,是一对一的映射:
public function user(){ return $this-gtbelongsTo(User) }
现在假如有一个查询,获取所有的帖子,并返回发布者的信息。如下:
public function getAllPosts() { return Post::with(user)-gtget() }
这样在返回值中,就可以使用 $post-gtuser 返回 User 模型,并访问其属性和方法。经过框架整合后的 SQL 语句大概是这样的:
select * from `posts` select * from `users` where `users`.`id` in (lt1gt, lt2gt)
显然,第二条SQL语句,返回了user表的所有列,数据量有可能很大。是否可以返回指定列呢?这样可以精简输出,减少MySQL的传输负荷。
with语句模型的with语句用于调用模型内声明的关联关系,其实它接收一个数组,可以在查询时关联多张表,同时支持一个闭包,用于对关联表的查询语句进行裁切。
如上一节要指定user表的列,可以这样写:
Post::with(array(usergtfunction($query){ $query-gtselect(id,username) }))-gtget()
闭包内$query拼接SQL语句,并指定 select 选取的列,那么框架生成的SQL语句,就只会返回 id,username 列。
关联关系我们注意到,在关联关系的声明上,第一节仅使用了 belongTo,hasMany 这样的属性,其实还可以链式调用。这样对于所有使用 with 语句关联的模型查询,都会生效。
没错儿,接着关联关系用下去。比如Post模型内:
public function user() { return $this-gtbelongsTo(User)-gtselect(array(id, username)) }
特殊性在Laravel5.5及以上的版本,支持在使用with语句的使用,按照格式书写返回指定列。
Post::with(user:id,username)-gtget()
低版本可就没有那么好运气了!:-(
写在最后本文通过2种确切可用的方式,裁剪了关联模型返回列的内容。
在实际代码中,第一种使用闭包修剪SQL语句,用途较为广泛。
第二种方式影响全局,一般不推荐。
第三种则是第一种的变体,但是对版本有要求。
Happy coding :-)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

大数据的含义和作用是什么?

大数据简单说就是现实世界数据化!
而大数据对于个人的意义就是:个人与信息的强结合,个人自带可信的信息。
就拿健康码来说,为什么绿码就能放行?为什么各个检查口看到绿码就放行?因为绿码 是携带了个人安全的健康信息,表示这个人是低风险的。
换句话说,健康码是个人信息的一部分,而且是可信的。
健康码的存在,是基于大数据的。我们人会休息,但是手机不会休息,于是我们的位置信息随时随地被记录下来,形成一个个人的行动路径。我们有没有经过高风险地区,甚至可以划分到社区和小区。通过收集类似的个人大量数据,最终形成了一个绿色的健康码。以证明我们是安全的,我们没有携带病毒。
早期互联网,人和信息是分开的。电脑是固定在一个个地方,我们只能收集到ip,个人账户信息。地理位置只能通过ip来推测,那个时代,广告的精准推送是非常难的。只能根据地区来推送。
而现在,智能手机的大量普及,不可避免的,我们通过各种“用户协议”开始暴露我们的个人数据,去了哪里,买了什么东西,和谁是朋友和一些基本信息,性别,年龄等等。
于是,大数据算法可以推算出,我们的行动路径,我们的爱好,活跃时间,喜欢什么app,喜欢什么文章。最终逐渐的,我们数据个人形象越来越逼近真实的我们。
而健康码的出现,几乎就是一个正面的证明,说明我们的个人数据形象和真实的我们已经几乎等同了。
这就是大数据时代,我们逐渐在变得越来越透明,越来越数据化。
数据就是我们,我们就是数据!