7

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

public static function relatableUsers(NovaRequest $request, $query)
{
    return $query->where('company_id', ???);
}

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

public static function relatableUsers(NovaRequest $request, $query)
{
    return $query->where('company_id', 'FA624E60-DD37-11E8-A540-C3C0A709EE15');
}  

记录信息不存储在$request或 中$query

编辑 - 添加关系

用户型号:

public function company()
{
    return $this->belongsTo(Company::class);
}

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

}

定位模型:

public function company()
{
    return $this->belongsTo(Company::class);
}

    public function users()
{

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

}

公司型号关系:

public function users()
{

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

}


public function location()
{

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

}
4

2 回答 2

6

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

public static function relatableUsers(NovaRequest $request, $query)
{
    $location = $request->findResourceOrFail(); // Retrieve the location instance
    return $query->where('company_id', $location->company_id);
}
于 2018-11-09T06:20:40.307 回答
0

因此,您locationsusers表都有一个company_id字段,并且您想要提取与company_id您正在处理的位置相同的用户列表。这可以通过过滤现有的关系方法来完成:

<?php
class Location extends Model
{
    public function relatableUsers()
    {
        return $this->users()->where("company_id", $this->company_id)->get();
    }
}

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

<?php
$loc = Location::find($id);
$users = $loc->relatableUsers();
于 2018-11-07T18:16:02.350 回答