我目前发现你可以补充Raw sql查询。
我有以下查询:
DB::table(DB::raw('(SELECT *, Y(location) AS longitude, X(location) AS latitude FROM meetings WHERE MBRCONTAINS(@quadrat, location)) AS sub'))
->select(DB::raw('(FLOOR(SQRT(POW((@ibk_breite - sub.latitude) * 111, 2) + POW((@ibk_laenge - sub.longitude) * 111 * ABS(COS(RADIANS(@ibk_breite))),2)))) AS distance, sub.*, latitude, longitude'));
我跟随水合物
$meetings = Meeting::fromQuery($query->toSql());
在刀片视图中,我需要从不同的表中获取一些额外的数据,例如:
$meeting->user
引用用户模型。但是如果我不完全错误会导致每个循环中的n + 1问题,因为我不急于加载它?!因此,可以像通常那样使用
来急切加载所需的模型->with('user', 'books', 'etc...')
...
也可以像$meetings = $query->paginate(5);
和$meetings->withPath('home');
编辑: 找到了解决方案:
// Do your query stuff
// Get count before the query because it won't work with skip and take parameter
$count = $query->count();
$query->skip($skip);
$query->take($meetingsPerPage);
$meetings = Meeting::fromQuery($query->toSql());
$meetings->load('user', 'interest.image', 'img_thumbnail');
$meetings = new LengthAwarePaginator($meetings, $count, $meetingsPerPage);
$meetings->load
充当->with()
。
作为最后一步,您需要创建一个分页器。重要提示:在设置query->count()
和/或skip()
之前使用take()
,否则无效。
来自laracasts的原始答案。还有另一种说法可能不适用于我。
答案 0 :(得分:0)
我的解决方案:
// Do your query stuff
// Get count before the query because it won't work with skip and take parameter
$count = $query->count();
$query->skip($skip);
$query->take($meetingsPerPage);
$meetings = Meeting::fromQuery($query->toSql());
$meetings->load('user', 'interest.image', 'img_thumbnail');
$meetings = new LengthAwarePaginator($meetings, $count, $meetingsPerPage);
$meetings->load
充当->with()
。最后一步,您需要创建一个分页器。重要说明:在设置query->count()
和/或skip()
之前,请先使用take()
,否则它将不起作用。
laracasts的原始答案。还有另一个可能的说法对我不起作用。
答案 1 :(得分:0)
您可以对LengthAwarePaginator对象(在Illuminate / Pagination / AbstractPaginator.php中找到)使用setCollection()函数。使用load()进行急切的加载。
$users = DB::table('users')->paginate();
$users->setCollection(User::hydrate($users->items())->load(['category']));