在我的应用程序中,我试图创建一个相关事件部分,其中显示与特定事件相关的所有事件。
我有这个疑问
public function show($id)
{
// The current event
$event = Event::find($id);
// Find related, upcoming events
$tags = $event->tags;
$relatedEvents = Event::where('startDate', '>=', Carbon::now())
->where(function ($query) use ($event) {
$query->where('hostedBy', $event->hostedBy);
$query->orWhere('type', $event->hostedBy);
$query->orWhere('category', $event->hostedBy);
$query->orWhere('sector', $event->hostedBy);
})
->toSql();
dd($relatedEvents);
}
哪个输出遵循SQL
"select * from
事件
where
开始日期
>= ? and (
招待所
= ? or
类型
= ? 或
类别
= ? 或
部门
= ?)"
我试过了
/**
* Display the specified resource.
*
* @param \App\Event $event
* @return \Illuminate\Http\Response
*/
public function show($id)
{
// The current event
$event = Event::find($id);
// Find related, upcoming events
$tags = $event->tags;
$relatedEvents = Event::where('startDate', '>=', Carbon::now())
->where(function ($query) use ($event) {
$query->where('hostedBy', $event->hostedBy);
$query->orWhere('type', $event->hostedBy);
$query->orWhere('category', $event->hostedBy);
$query->orWhere('sector', $event->hostedBy);
$query->orWhereHas('tags', function ($query) use ($tags) {
$query->where('slug', $tags->slug);
});
})
->toSql();
dd($relatedEvents);
}
但是通过这次尝试,我得到了未定义的变量
$tags
可以有许多嵌套查询吗?
这是因为我需要检查字段,但也需要比较给定给事件的标记。
另外,如果当前文章根本没有标签,我该怎么办?
更新
public function show($id)
{
// The current event
$event = Event::find($id);
// Find related, upcoming events
$tags = $event->tags;
$relatedEvents = Event::where('startDate', '>=', Carbon::now())
->where(function ($query) use ($event, $tags) {
$query->where('hostedBy', $event->hostedBy);
$query->orWhere('type', $event->type);
$query->orWhere('category', $event->category);
$query->orWhere('sector', $event->sector);
$query->orWhereHas('tags', function ($query) use ($tags) {
foreach ($tags as $tag) {
$query->where('slug', $tag->slug);
}
});
})
->orderBy('startDate', 'dsc')
->toSql();
dd($relatedEvents);
}
我需要测试这个,但由于可能有多个标签,我循环通过它们。