php - 查找评论有多个标签。在多对多多态 laravel 关系中
问题描述
嗨,我正在尝试使用多对多多态,但不知何故它不起作用我无法在多对多多态关系中获得相关评论我想通过标签获得评论,由客户选择
表结构:
review
> id - integer
> name - string
tags
> id - integer
> name - string
taggables
> tag_id - integer
> taggable_id - integer
> taggable_type - string
楷模:
class Tag extends Eloquent
{
public function reviews()
{
return $this->morphedByMany(Review::class, 'taggable');
}
}
class Review extends Eloquent
{
public function tags()
{
return $this->morphToMany(Tag::class, 'taggable');
}
}
来自客户 [tag_id_1,tag_id_2,tag_id_3,tag_id_4] 的请求
像 [1, 2, 3, 4, 5] 标签键数组的请求
如果与此标签相关的评论找到并获得评论,我尝试了类似的方法
退货相关评论代码:
return Review::join('taggables', 'taggables.taggable_id', '=', 'reviews.id')
->where('taggables.taggable_type', '=', Review::class)
->whereIn('taggables.tag_id', [1, 2, 3, 4, 5])
->groupBy('reviews.id')
->orderBy('name', 'asc')
->get();
或者:
Review::WhereHas('tags', function ($query) {
$query->whereIn('tags_id', [1, 2, 3, 4, 5]);
})->get();
我需要的结果:唯一应该有这些标签的评论
review:{
name: "Review",
tags :[1, 2, 3, 4, 5]
}
解决方案
您的查询中有错字。正确的形式 taggables.tagable_id
应该是taggables.taggable_id
。我不知道这是否是问题,但建议您编写如下代码。
在审查模型中定义如下关系:
public function tags()
{
return $this->morphToMany(Tag::class, 'taggable','taggables','taggable_id','tag_id');
}
并在标签模型中定义如下关系:
public function reviews()
{
return $this->morphedByMany(Review::class, 'taggable','taggables','tag_id','taggable_id');
}
当您想要返回特定标签的评论时,请执行以下操作:
$tag=Tag::find(1);
$tagReviews=$tag->reviews;
推荐阅读
- gitlab - gitlab socket connect:连接被拒绝
- arrays - 在数组对象中搜索特定字段并将其放入另一个数组中,以便以角度显示表格
- php - 如何在 Laravel Jetstream 中设置用户当前团队
- python - 如何修复 django 项目中的导入错误?
- android - EditText getText().toString() 未显示全文 Android
- operating-system - 如何找到物理地址和虚拟地址的位?
- mysql - 了解 rows_examined_per_scan 和 rows_produced_per_join
- parameters - 通配符作为snakemake中的参数?
- javascript - 由于数据库查询延迟了其余的 JS 代码
- angular - AG-GRID:外部过滤器一次返回基于多个角色的行