为了账号安全,请及时绑定邮箱和手机立即绑定

如何构建 Eloquent 查询来检索主表的记录,在 Laravel 5 PHP 中对其相关表应用

如何构建 Eloquent 查询来检索主表的记录,在 Laravel 5 PHP 中对其相关表应用

PHP
SMILET 2021-11-26 14:40:13
使用 Laravel 文档中的示例多对多多态关系数据库结构如下:posts  id - integer  name - stringvideos  id - integer  name - stringtags  id - integer  name - stringtaggables  tag_id - integer  taggable_id - integer  taggable_type - string我想检索OR 的post记录。post.name LIKE %laravel%tags.name LIKE %laravel%如何使用 Eloquent 模型来构建这样的查询?这对我来说是一个很大的挑战,因为我只想获得名称由单词组成的laravel帖子或其相关标签的名称由相同单词组成的任何帖子。
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

您可以whereHas为此使用。


从文档:


如果您需要更多功能,您可以使用 whereHas 和 orWhereHas 方法将“where”条件放在您的查询上。这些方法允许您向关系约束添加自定义约束,例如检查评论的内容


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();


查看完整回答
反对 回复 2021-11-26
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这应该有效:


$result = Post::whereHas('tags', function ($query) {

    $query->where('name', 'like', '%laravel%')

        ->orWhere('tags.name', 'like', '%laravel%');

})->get();


查看完整回答
反对 回复 2021-11-26
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信