我有很多到很多用户和地点之间的关系。我想过滤我的“附加用户”选择列表,只显示其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);
}发布于 2018-11-09 06:20:40
您可以从请求中检索目标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-07 18:16:02
因此,您的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。这将返回一个查询构建器实例,您可以在与数据库对话之前修改该实例,而不是在PHP端拉动所有用户并对集合进行排序。现在,您可以在Location模型的一个实例上调用它:
<?php
$loc = Location::find($id);
$users = $loc->relatableUsers();https://stackoverflow.com/questions/53180510
复制相似问题