Nova Relatable Filtering-如何过滤company_id与位置company_id匹配的用户

时间:2018-11-06 21:43:17

标签: php laravel laravel-nova

我在用户和位置之间有很多关系。我想过滤“附加用户”选择列表,以仅显示其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);

}

2 个答案:

答案 0 :(得分:2)

您可以从请求中检索目标delivery_method: :smtp smtp_settings: address: smtp.zoho.com port: 587 authentication: :plain domain: smtp.zoho.com user_name: "you@mail.com" password: "xxxx" enable_starttls_auto: true ,如下所示。

Location

答案 1 :(得分: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();