В моем приложении я пытаюсь создать связанный раздел «События», в котором отображаются все события, связанные с определенным событием.
У меня был этот запрос
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
startDate >= ? and (
hostedBy = ? or
тип = ? or
категория = ? 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);
}
Мне нужно проверить это, но, поскольку может быть несколько тегов, я прошел через них.