我试图在eloquent中使用此查询为特定用户的书签中的特定标记名称执行搜索查询:
SELECT * FROM
bookmarks_tags
WHERE tag_id in(SELECT id FROMtags
名称(' new',' please'' work'))和bookmark_id in(SELECT id 来自书签,其中userid = 1)
我有以下模型设置关系:
标记模型
class Tag extends Eloquent
{
public function bookmarks()
{
return $this
->belongsToMany('Bookmark','bookmarks_tags');
}
}
书签型号:
class Bookmark extends Eloquent {
.....
public function owner()
{
return $this->belongsTo('User','id');
}
public function tags()
{
return $this->belongsToMany('Tag','bookmarks_tags','bookmark_id','tag_id');
}
}
最后是用户模型:
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
.....
public function bookmarks()
{
return $this->hasMany('Bookmark','userid');
}
}
这是我的数据库架构:
我知道我可以通过以下方式获取书签和标签ID:
$bookmarkIDs = Auth::user()->bookmarks()->get('id');
$tagsID = Tag::whereIn('name', $tags)->get('id');
但我无法确定如何为bookmarks_tag执行此查询。
答案 0 :(得分:1)
不确定我是否理解您的要求,但这会为您提供属于具有指定特定标签的用户的书签:
$tags = ['new', 'please', 'work'];
$bookmarks = Bookmark::whereHas('owner', function($q){
$q->where('users.id', 1);
})->whereHas('tags', function($q) use ($tags){
$q->whereIn('name', $tags);
})->get();
或者(实际上有点简单)
$bookmarks = Bookmark::whereHas('tags', function($q) use ($tags){
$q->whereIn('name', $tags);
})->where('userid', 1)->get();