gpt4 book ai didi

php - 在多对多多态中搜索具有相同标签的所有行

转载 作者:行者123 更新时间:2023-11-29 00:03:55 25 4
gpt4 key购买 nike

我正在使用 Laravel 5,并且与我的标记系统有这样的多对多多态关系。

posts
id - integer
name - string

videos
id - integer
name - string
url - string


tags
id - integer
name - string

taggables
tag_id - integer
taggable_id - integer
taggable_type - string

现在,我要创建一个搜索页面来搜索具有相同标签的所有帖子和视频吗?我考虑过 MySQL 中的联合,但视频和帖子表列不相等。有什么建议吗?

最佳答案

使用 Eloquent 的力量。

创建模型文件(Post.phpVideo.phpTag.php)。

后.php

class Post extends Eloquent {

public function tags()
{
return $this->belongsToMany('Tag');
}
}

视频.php

class Video extends Eloquent {

public function tags()
{
return $this->belongsToMany('Tag');
}
}

标签.php

class Tag extends Eloquent {

public function posts()
{
return $this->belongsToMany('Post');
}

public function videos()
{
return $this->belongsToMany('Video');
}

}

有关此的更多信息,您可以在 Laravel 中阅读 Eloquent Relationships文档。

接下来,代替 taggeables 创建两个数据透视表:第一个 post_tag 与字段 tag_idpost_id 连接带有标签的帖子,第二个 tag_video 带有字段 video_idtag_id 以将视频与标签连接起来。

最后,要获得所有具有相同标签 ID(比如 $tag_id)的帖子和视频,您可以这样做(如果您的 Post.php 模型确实包含 tags( ) 方法):

对于帖子:

$posts = Post::whereHas(`tags`, function($q) {
$q->where('id', '=', $this->id);
})->orderBy('name', 'ASC')->get();

对于视频:

$videos = Video::whereHas(`tags`, function($q) {
$q->where('id', '=', $this->id);
})->orderBy('name', 'ASC')->get();

关于php - 在多对多多态中搜索具有相同标签的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28403740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com