【问题标题】:using 'where' in the pivot table在数据透视表中使用“where”
【发布时间】:2021-11-19 00:35:24
【问题描述】:

我有一个portal_user 表和portal_roles 表。我有一个数据透视表 pivot_user_roles,它将用户与其角色联系起来。

    class Role extends Model
{
    use HasFactory;
    protected $table = 'portal_roles';
    
    protected $hidden = array('created_at', 'updated_at','deleted_at');
    
    public function users()
    {
    return $this->belongsToMany(User::class, 'portal_user_roles');
    }
}

class UserRole extends Model
{
    use HasFactory;
    protected $table = 'portal_user_roles';
    
    protected $fillable = ['user_id','role_id'];
    
     
}

我正在使用以下代码来搜索属于特定角色的用户

$resultset = '';
$searchquery = $data['query'];

    $rolesobj = Role::find($type_id);
    if (self::checksearchtype($searchquery) == NAME_ONEPART) {
            
      

        $resultset = $rolesobj->users->where('firstname', 'like', '%' . $searchquery . '%');
  

以上

在哪里

语句没有产生任何结果。我期望上面的语句将在 users 表中搜索,根据选择的角色和传递的名称(或名称的一部分)来查找用户。

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:
    $rolesobj->users()->where(...)->get()
    

    您需要调用用户关系来执行此操作。因为当您尝试将其作为属性访问时,mutators 会直接从数据库中获取项目。

    顺便说一句,你也可以在你的情况下添加一些条件。

    $rolesobj->users->where(...
    

    但是在这种情况下,您有一个集合对象,并且您无法尝试查询它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-20
      • 2019-02-03
      • 2018-11-12
      • 1970-01-01
      • 2021-02-06
      • 2018-11-05
      • 2010-12-07
      • 1970-01-01
      相关资源
      最近更新 更多