Laravel 在 with 查询中只查询个别字段
2017-04-28 09:13
288 查看
在使用 Laravel 的关联查询中,我们经常使用
这时候我们可以使用下面的技巧在使用 with 时只查询目标关联的部分字段:
但是每次查询都写得这么繁琐真的好么?不如利用 Laravel 的范围查询将其封装起来:
在 Model 基类中定义一个范围查询(或者使用 Trait)
在我们普通的 Model 类都继承基类:
然后使用就很方便了:
note:with查询结果空是因为你的查询字段不包含你的关联字段, 就比如 拿ID关联的话, 你就得 select() 里必须包含ID, 要么就返回空
转载自:https://laravel-china.org/topics/1220/laravel-queries-only-individual-fields-in-with-queries
with方法来避免
N+1查询,但是
with会将目标关联的所有字段全部查询出来,对于有强迫症的我们来说,当然是不允许的。
这时候我们可以使用下面的技巧在使用 with 时只查询目标关联的部分字段:
$topics = Topic::limit(2)->with(['user'=>function($query){ $query->select('id','username'); }])->get();
但是每次查询都写得这么繁琐真的好么?不如利用 Laravel 的范围查询将其封装起来:
在 Model 基类中定义一个范围查询(或者使用 Trait)
class BaseModel extends \Eloquent{ public function scopeWithOnly($query, $relation, Array $columns) { return $query->with([$relation => function ($query) use ($columns){ $query->select(array_merge(['id'], $columns)); }]); } }
在我们普通的 Model 类都继承基类:
class Topic extends BaseModel{ public function user() { return $this->belongsTo('User'); } }
然后使用就很方便了:
$topics = Topic::limit(2)->withOnly('user', ['username'])->get();
note:with查询结果空是因为你的查询字段不包含你的关联字段, 就比如 拿ID关联的话, 你就得 select() 里必须包含ID, 要么就返回空
转载自:https://laravel-china.org/topics/1220/laravel-queries-only-individual-fields-in-with-queries
相关文章推荐
- exists、 all 、max、 with 、复制表、多字段组合查询等sql总结
- HQL查询中取个别几个字段
- laravel查询数据库(两个字段相等查询方法)
- Oracle PLSQL Demo - 17.游标查询个别字段(非整表)
- laravel-mongodb查询条件与字段类型不一致问题
- laravel 查询指定字段的值
- laravel5.4 使用多字段查询分组报错
- Laravel Eloquent ORM 时如何查询表中指定的字段
- laravel中的关联查询with问题
- Hibernate hql 查询指定字段并获取结果集
- 查询某字段名在哪些表中
- 查询MySql数据库架构信息:数据库,表,表字段
- Mybatis三个表级联查询,并展示不同字段(全)
- 对一个字段中的多个其他表的主键进行查询
- 关于mongodb按照字段模糊查询方法
- laravel查询得到的数据(为对象object)无法进行数组循环遍历,而且不能用数组方式访问和查看的原因以及解决方法
- 用mysql查询某字段是否有索引
- sql查询两张表的同名字段时只显示第一个的信息
- SQL“多字段模糊匹配关键字查询”[转载]
- Oracle 查询库中所有表名、字段名、表名说明、字段名说明(原创)