首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nova相关过滤-如何过滤其company_id匹配位置为company_id的用户

Nova相关过滤-如何过滤其company_id匹配位置为company_id的用户
EN

Stack Overflow用户
提问于 2018-11-06 21:43:16
回答 2查看 4.5K关注 0票数 7

我有很多到很多用户和地点之间的关系。我想过滤我的“附加用户”选择列表,只显示其company_id与我当前所在位置的company_id匹配的用户。我已经创建了一个名为relatableUsers的静态函数,它向查询中添加了一个"where“子句。

代码语言:javascript
复制
public static function relatableUsers(NovaRequest $request, $query)
{
    return $query->where('company_id', ???);
}

如何将当前位置的company_id拖到where查询中?如果我硬编码类似于过滤器下面的company_id,那么我就知道这是可能的。

代码语言:javascript
复制
public static function relatableUsers(NovaRequest $request, $query)
{
    return $query->where('company_id', 'FA624E60-DD37-11E8-A540-C3C0A709EE15');
}  

记录信息没有存储在$request$query中。

编辑-添加关系

用户模型:

代码语言:javascript
复制
public function company()
{
    return $this->belongsTo(Company::class);
}

    public function locations()
{
    return $this->belongstoMany(Location::class);

}

位置模型:

代码语言:javascript
复制
public function company()
{
    return $this->belongsTo(Company::class);
}

    public function users()
{

    return $this->belongstoMany(User::class);

}

公司模式关系:

代码语言:javascript
复制
public function users()
{

    return $this->hasMany(User::class);

}


public function location()
{

    return $this->hasMany(Location::class);

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-09 06:20:40

您可以从请求中检索目标Location,如下所示。

代码语言:javascript
复制
public static function relatableUsers(NovaRequest $request, $query)
{
    $location = $request->findResourceOrFail(); // Retrieve the location instance
    return $query->where('company_id', $location->company_id);
}
票数 7
EN

Stack Overflow用户

发布于 2018-11-07 18:16:02

因此,您的locations表和users表都有一个company_id字段,您希望提取与您正在处理的位置具有相同company_id的用户列表。这可以通过过滤现有的关系方法来完成:

代码语言:javascript
复制
<?php
class Location extends Model
{
    public function relatableUsers()
    {
        return $this->users()->where("company_id", $this->company_id)->get();
    }
}

注意,我调用的是$this->users(),而不是$this->users。这将返回一个查询构建器实例,您可以在与数据库对话之前修改该实例,而不是在PHP端拉动所有用户并对集合进行排序。现在,您可以在Location模型的一个实例上调用它:

代码语言:javascript
复制
<?php
$loc = Location::find($id);
$users = $loc->relatableUsers();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53180510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档