php - 如果数据透视表条件为真,Laravel 从集合中获取第一项
问题描述
假设我的数据库中有以下多对多多态关系。
posts
id - integer
name - string
videos
id - integer
name - string
tags
id - integer
name - string
taggables
tag_id - integer
taggable_id - integer
taggable_type - string
stuff - string
我从数据库中检索帖子。
$post = Post::find(1);
我怎样才能在哪里获得与这篇文章相关的标签stuff == something
?我想创建函数,以便每次需要时都可以调用它。
此代码有效:
public function get_my_tag() {
return $post->tags()->wherePivot('stuff', 'something')->first();
}
但是每次我调用它时它都会从数据库中检索它。我需要一种将 $tag 存储在 $post 中的方法,因此无论我调用多少次get_my_tag()
,它都应该只从数据库中检索一次。
解决方案
像这样做
Post::with([
'tags' => function ($query) {
$query->where('any_field_on_tags_table', 'value');
},
])->find(1);
你需要使用whereHas()
方法
Post::with('tags')->whereHas('tags', function ($query) {
$query->where('any_field_on_tags_table', 'value');
})->find(1);
推荐阅读
- elixir - 具有相对路径的 Elixir/Phoenix 文件上传文件夹
- python - Python:在递减集中使用 next 和 iter 检测循环
- sql - 执行 Teradata UDF 触发器数据类型与定义的类型名称不匹配
- hadoop - Apache Nifi 无法写入 HDFS
- html - 不同电脑上的相同位置
- reactjs - react.js、npm serve 和“异步 isDebugging”错误
- javascript - 如何使用 Javascript ajax 调用在 DialogFlow v2 上进行 http 调用
- ios - iOS应用程序中Objective-C代码的内存泄漏
- c++ - 移动 boost::property_tree::ptree 的构造函数
- node.js - 如何使用 Sequelize 连接 3 个表?