Nova 相关过滤 - 如何过滤 company_id 匹配位置 company_id 的用户
Nova Relatable Filtering - how to filter users whose company_id matches locations company_id
我在用户和位置之间建立了多对多关系。我想过滤我的 "attach user" select 列表,只显示 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);
}
所以你的 locations
和 users
表都有一个 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
。这个 return 一个查询生成器实例,您可以在与数据库对话之前更改它,而不是拉动所有用户并在 PHP 端对集合进行排序。现在您可以在 Location
模型的实例上调用它:
<?php
$loc = Location::find($id);
$users = $loc->relatableUsers();
您可以从如下请求中检索目标 Location
。
public static function relatableUsers(NovaRequest $request, $query)
{
$location = $request->findResourceOrFail(); // Retrieve the location instance
return $query->where('company_id', $location->company_id);
}
我在用户和位置之间建立了多对多关系。我想过滤我的 "attach user" select 列表,只显示 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);
}
所以你的 locations
和 users
表都有一个 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
。这个 return 一个查询生成器实例,您可以在与数据库对话之前更改它,而不是拉动所有用户并在 PHP 端对集合进行排序。现在您可以在 Location
模型的实例上调用它:
<?php
$loc = Location::find($id);
$users = $loc->relatableUsers();
您可以从如下请求中检索目标 Location
。
public static function relatableUsers(NovaRequest $request, $query)
{
$location = $request->findResourceOrFail(); // Retrieve the location instance
return $query->where('company_id', $location->company_id);
}