加载包含组标签的文章
load articles with the included tags of the group
我想在一个群组中显示与该群组具有相同标签的所有文章。
例如:
该组有标签:laravel、php、html。然后我想让所有的文章都具有完全相同的标签。所以所有带有标签 laravel, php, html.
的文章
并非所有文章都只有一个相同的标签,只有所有文章都具有相同的标签。 $tagIdArray 是组的标签。
我试过这段代码:
$tagIdArray = [2,3,4];
$article = Article::with('comments', 'tags')->whereIn('privacy', [1, 2])->where('status', 1)
->where(function ($query) use ($tagIdArray) {
return $query->tags->pluck('id')->all() == $tagIdArray;
})
->latest()->paginate(15);
但我总是收到错误消息:
Undefined property: Illuminate\Database\Eloquent\Builder::$tags
Post型号
public function tags()
{
return $this->morphToMany('App\Tag', 'taggable')->withTimestamps();
}
标签模型
public function taggable()
{
return $this->morphTo();
}
可标记模型
public function tag()
{
return $this->belongsTo('App\Tag');
}
编辑:
例如,如果我显示所有组并且我想使用articel的随机图像作为组图像。我如何最好地实施它?
@foreach ($groups as $group)
{{$group->name}}
<img src="-----load random picture from articles that is in this group------" alt="" />
@endforeach
以下方法可以解决问题:
$tagIdArray = [2,3,4];
$article = Article::with('comments', 'tags')
->whereIn('privacy', [1, 2])
->where('status', 1)
->whereHas('tags', function($query) use ($tagIdArray) {
$query->whereIn('id', $tagIdArray);
}, '>=', count($tagIdArray))
->latest()
->paginate(15);
whereHas() 允许您仅过滤具有与回调(第二个参数)定义的约束相匹配的相关模型(第一个参数)的模型。
除此之外,您还可以说明匹配给定约束 returned 模型应该有多少个相关模型 - 这就是最后 2 个参数的作用。上面的代码将 return 文章至少包含所有带有 $tagIdArray 中的 ID 的标签 - 它还将包含比提供的 3 个标签更多的文章。如果你想要 return 文章包含所有且仅包含 $tagIdArray 中提供的标签,请将 >= 运算符替换为 =.
我想在一个群组中显示与该群组具有相同标签的所有文章。 例如:
该组有标签:laravel、php、html。然后我想让所有的文章都具有完全相同的标签。所以所有带有标签 laravel, php, html.
的文章并非所有文章都只有一个相同的标签,只有所有文章都具有相同的标签。 $tagIdArray 是组的标签。
我试过这段代码:
$tagIdArray = [2,3,4];
$article = Article::with('comments', 'tags')->whereIn('privacy', [1, 2])->where('status', 1)
->where(function ($query) use ($tagIdArray) {
return $query->tags->pluck('id')->all() == $tagIdArray;
})
->latest()->paginate(15);
但我总是收到错误消息:
Undefined property: Illuminate\Database\Eloquent\Builder::$tags
Post型号
public function tags()
{
return $this->morphToMany('App\Tag', 'taggable')->withTimestamps();
}
标签模型
public function taggable()
{
return $this->morphTo();
}
可标记模型
public function tag()
{
return $this->belongsTo('App\Tag');
}
编辑:
例如,如果我显示所有组并且我想使用articel的随机图像作为组图像。我如何最好地实施它?
@foreach ($groups as $group)
{{$group->name}}
<img src="-----load random picture from articles that is in this group------" alt="" />
@endforeach
以下方法可以解决问题:
$tagIdArray = [2,3,4];
$article = Article::with('comments', 'tags')
->whereIn('privacy', [1, 2])
->where('status', 1)
->whereHas('tags', function($query) use ($tagIdArray) {
$query->whereIn('id', $tagIdArray);
}, '>=', count($tagIdArray))
->latest()
->paginate(15);
whereHas() 允许您仅过滤具有与回调(第二个参数)定义的约束相匹配的相关模型(第一个参数)的模型。
除此之外,您还可以说明匹配给定约束 returned 模型应该有多少个相关模型 - 这就是最后 2 个参数的作用。上面的代码将 return 文章至少包含所有带有 $tagIdArray 中的 ID 的标签 - 它还将包含比提供的 3 个标签更多的文章。如果你想要 return 文章包含所有且仅包含 $tagIdArray 中提供的标签,请将 >= 运算符替换为 =.