当前位置: 首页 > 知识库问答 >
问题:

Laravel Eloquent-如何将作用域查询中的计算值作为模型列或集合属性返回

胡景焕
2023-03-14

我试图获得一个靠近已验证用户的用户列表,并使用Laravel的Eloquent返回他们之间的距离。 我使用原始SQL使其正常工作,但现在我几乎可以使用Multimy Eloquent使其正常工作。

所以,在用户模型上,我有这样的方法:

public function getUsersAround($coordinates, $radius = 5)
{
    return $this->whereHas('location', function ($query) use ($coordinates, $radius) {
            $query->distance($coordinates, $radius);
        })->paginate(10);
}

那么在位置模型上,我有如下的范围:

public function scopeDistance($query, $coordinates, $radius)
{
    return $query
        ->join('profiles', 'profiles.id', '=', 'locations.profile_id')
        ->having('distance', '<', $radius)
        ->selectRaw("profile_id,
                 (6371 * ACOS(COS(RADIANS($coordinates->latitude))
                       * COS(RADIANS(latitude))
                       * COS(RADIANS(longitude) - RADIANS($coordinates->coordinates))
                       + SIN(RADIANS($coordinates->latitude))
                       * SIN(RADIANS(latitude)))) AS distance")
        ->orderBy('distance', 'asc')
        ->get();
}

因此,radius中的所有用户都被正确返回,但我还想将计算出的距离添加到每个返回的用户中。

奇怪的是,如果我dd($query->distance($cordinations,$radiation));,我会在每个用户对象上看到所有的用户+一个新的distance属性(具有正确的值),但是如果我只返回查询和控制器内的dd(auth()->user()->getUsersaround($cordinations,$radiation)),distance属性就不再存在了。

有没有一种方法可以在范围查询内部返回计算出的距离,并在返回用户列表时将其持久化在Users对象上?

谢啦!

共有1个答案

李光华
2023-03-14

这是因为您在一个不正确的范围内使用get()。 本地作用域旨在定义公共约束集(如用于筛选数据)。 有关更多详细信息,请查看有关本地作用域的文档。

要向select结果添加某些内容,可以使用AddSelect。

 类似资料:
  • 对JPA来说比较新,所以我有一个架构问题。假设我有多对一关系的员工和部门表(即许多员工为一个部门工作): 所以我可以为员工和部门定义合适的实体,没有问题。但是,在一个视图中,我想显示部门列表,其中包含为该部门工作的员工数量,类似于这样: 我只是不确定使用JPA实现这一目标的正确策略是什么。。。我不想总是获取部门实体的员工数量,因为需要时只有一个视图。 看起来HiberNate的@公式是一种可能的方

  • 我正在尝试计算配置单元中视图的平均/最小/最大记录计数 并试图实现如下内容: 但我收到一条错误消息: avg=5 min=4 max=6

  • 问题内容: 我尝试用泛型创建一个抽象类。业务逻辑是将文本从一种语言翻译成另一种语言。每种语言都必须有一个课程。对于每种语言,我还需要一个类,该类是方法的返回对象,它具有参数。T应该是(例如EnglishText,ChineseText等)的子类。那就是我奋斗的地方。您如何编码此约束? 我创建了以下超级类。 如果我误解了泛型的概念或将其错误地使用,请说明一下。谢谢。 问题答案: 只需将其添加到定义泛

  • 英文原文:http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/ 计算属性时常依赖一个数组中的全部元素来计算其值。例如,要知道有多少已经完成的待办事项,那么需要计算控制器中所有的待办事项才能得出结果。 下面是一个计算属性的示例: 1 2 3 4 5 6 7 8 9 10 App.TodosCon

  • 我正在讨论设计我们的API(Stream vs Collection作为返回类型)的最佳方式。这篇文章中的讨论非常有价值。 @BrainGotez的答案提到了一个条件,即集合优于流。我不太明白这意味着什么,谁能帮我举个解释的例子? 当有很强的一致性要求时,您必须生成移动目标的一致快照 我的问题是,具体而言,“强一致性要求”和“移动目标的一致快照”在现实应用中意味着什么?

  • 我是mongoDB的新手,使用2.6.4版。我被困在编写mongo查询和在这里寻求专家的帮助。 我在myCollection中有以下示例文档: 如何编写mongo查询,从满足以下条件的myCollection中提取文档: 返回所有只有标记状态记录的msgID(即排除那些具有INITIATED或CLOSED状态条目的msgID)。 以及时间发送的位置 预期结果为: 我知道在SQL中,这可以通过以下查

  • 问题内容: 可以说我们有一个带有JPA注释的类,其属性类型为List。该代码当前工作正常。 有没有办法查询包含元素“ yyy”的家庭列表?也就是说,类似: 问题答案: 请注意,您正在使用特定于Hibernate的功能CollectionOfElements。这不是严格的JPA。您可以使用HQL特定功能执行此操作: 这是一个工作示例: 为了完整起见,persistence.xml

  • 我正在尝试实现这个objective-c代码 为什么我要使用这个?CustView从很多地方调用,所以我们必须在所有地方检查这个条件。为了避免这种重复,我写了这个。 所以我尝试创建存储的属性,并使用getter方法检查是否已经创建。 这是正确的吗?或者其他方法来做这件事? 注意:上面的代码没有警告或错误。但是与存储和计算的属性混淆。请让我明白。