gpt4 book ai didi

laravel-5.4 - laravel hydrateRaw/fromQuery 和带分页的预加载

转载 作者:行者123 更新时间:2023-12-01 06:01:39 25 4
gpt4 key购买 nike

我目前发现您可以对原始 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());

在 Blade View 中,我需要从不同的表中获取一些额外的数据,例如:
 $meeting->user

其中引用了用户模型。但是,如果我不是完全错误的,那会在 for each 循环中导致 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 .还有另一个可能说这对我不起作用。

最佳答案

我的解决方案:

// 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 .还有另一个可能说这对我不起作用。

关于laravel-5.4 - laravel hydrateRaw/fromQuery 和带分页的预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44784480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com