【发布时间】:2020-04-14 00:03:11
【问题描述】:
我的 Laravel 应用程序中有一个页面,我在其中获取类别并急切加载该类别中的事件。它工作正常。我现在想要做的是获取类别,但这一次,根据用户选择的区域/位置获取事件。这些是我正在使用的模型;
1.区域类
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Region extends Model
{
/**
* Get events within region
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function events()
{
return $this->hasMany(Event::class);
}
}
-
类别类
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Category extends Model { /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'category_name', 'description', 'type', 'slug' ]; /** * Get all events that belong to a category * * @return Illuminate\Database\Eloquent\Relations\HasMany */ public function events() { return $this->hasMany(Event::class)->where('start_date', '>=', today())->orderBy('start_date', 'asc'); } }
3.事件
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
/**
* Get an event's category
*
* @return Illuminate\Database\Eloquent\Relations\BelongsTo;
*/
public function category()
{
return $this->belongsTo(Category::class);
}
/**
* Get region of event
*
* @return [type] [description]
*/
public function region()
{
return $this->belongsTo(Region::class);
}
}
这是返回带有事件的类别的查询;
if (session()->has('region')) {
$region_name = session()->get('region');
$region = Region::where('region_name', $region_name)->firstOrFail();
$categories = Category::withCount('events')
->with('events')
->whereHas('events', function (Builder $query) use ($region) {
$query->where('region_id', $region->id);
})
->orderBy('events_count', 'desc')
->take(5)
->get();
}
总结:我想获取用户所选位置中包含事件的前 5 个类别。
提前感谢您的帮助。
【问题讨论】:
标签: laravel eloquent relationship