laravel - 如何从查询结果中排除联接表数据
问题描述
假设我有以下查询,
$results = Listing::select('listings.id', 'listings.slug', 'page_contents.html_title AS name')
->join('page_contents', function ($join) {
$join->on('page_contents.subject_id', '=', 'listings.id')
->where('page_contents.subject_type', '=', 'App\Listing');
})
->get();
$results
将包括指定的选择列(这是我所需要的),而且,所有数据page_contents
,
{
"id": 3,
"slug": "omnis-et-harum-atque",
"name": "Omnis et harum atque",
"page_content": {
"id": 3,
"subject_type": "App\\Listing",
"subject_id": 3,
"html_title": "Omnis et harum atque",
"meta_title": "Omnis et harum atque",
... and a load more stuff I don't want,
"created_at": "2019-05-23 09:16:37",
"updated_at": "2019-05-23 09:16:37"
}
}
如何page_content
从返回的数据中删除。正在为 API 返回数据,因此page_data
信息超出了顶部。
拉拉维尔 5.8
干杯
解决方案
我将把这个答案放在这里,因为这就是我解决问题的方法,但我觉得有更好的方法隐藏在某个地方。该解决方案似乎依赖于连接是模型上定义的关系。能够在查询级别排除数据会很好。
要从集合中的项目中排除数据,makeHidden()
可以使用。
$results = Listing::select('listings.id', 'listings.slug', 'page_contents.html_title AS name')
->join('page_contents', function ($join) {
$join->on('page_contents.subject_id', '=', 'listings.id')
->where('page_contents.subject_type', '=', 'App\Listing');
})
->get();
$results->makeHidden('pageContent');
如果使用->paginate($size)
而不是->get()
,
$results->getCollection()->makeHidden('pageContent');
希望对某人有所帮助...
推荐阅读
- javascript - 从数组中的多个对象中过滤属性
- php - Drupal 7搜索API挂钩注册回调类未触发
- node.js - 输出对我的 webhook url 发出的 POST 请求(JSON 数据)?
- python - 为什么这个循环有“2 for i in range”?它有什么作用?
- regex - 如何从 `[[:punct:]]` 中获取 Ruby Regexp 标点符号列表?
- r - 结构主题模型(stm包)使用绘图函数绘制百分比值
- node.js - 如何在 Node.js 中的短信验证中制作字符串链接
- javascript - 如何在javascript中获取cookie的特定值
- android - 书法库不适用于华为 p20 lite
- java - 如何强制在另一个 bean 之后创建一个 spring bean?