php - 如何构建 Eloquent 查询来检索主表的记录,在 Laravel 5 PHP 的相关表上应用 where 子句?
问题描述
使用 Laravel 文档中的示例多对多多态 relaltionshiop 数据库结构,如下所示:
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
我想检索OR的post
记录。post.name LIKE %laravel%
tags.name LIKE %laravel%
如何使用 Eloquent 模型构建这样的查询?这对我来说是一个很大的挑战,因为我只想获取其名称由单词组成的laravel
帖子,或者其相关标签的名称由相同单词组成的任何帖子。
解决方案
你可以用whereHas
这个。
从文档:
如果您需要更多功能,您可以使用 whereHas 和 orWhereHas 方法将“where”条件放在您的 has 查询上。这些方法允许您将自定义约束添加到关系约束,例如检查评论的内容
use Illuminate\Database\Eloquent\Builder;
// Retrieve posts with at least one comment containing words like foo%...
$posts = App\Post::whereHas('comments', function (Builder $query) {
$query->where('content', 'like', 'foo%');
})->get();
在你的情况下,它会是这样的:
use Illuminate\Database\Eloquent\Builder;
$input = 'laravel';
Post::whereHas('tags', function (Builder $query) use ($input) {
$query->where('name', 'like', '%' . $input .'%');
})->orWhere('name', 'like', '%' . $input . '%')->get();
推荐阅读
- java - 如何避免 Android Studio 中 ArrayList 中的重复项?
- deep-learning - 已知 3D CAD 对象的 6D 姿态估计,对新对象进行有限模型训练
- python - 如何在python中操作日期时间?
- parsing - 将属性转换为 proc 宏上的标识符派生
- python - python上的二次方程求解函数
- windows - 是否可以从谷歌翻译 API 的输出中设置 Windows 批处理中的变量?
- javascript - Windows.alert() 防止访问/数据进入电子反应应用程序中的文本输入字段。处理 windows.alert 的最佳方法是什么?
- javascript - 在挂载的方法中调用监听器和 location.reload() 方法
- vba - 运行时错误 '1004' 方法 'Paste'_worksheet' 失败
- amazon-web-services - 将日志文件从客户端应用程序上传到 Amazon S3 是否安全?