'integer', 'report_to' => 'integer', 'sex' => 'integer', 'status' => 'integer', 'user_type' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; protected $hidden = [ 'password', ]; /** * 关联公司 */ public function company() { return $this->belongsTo(Company::class, 'company_id'); } /** * 上级用户 */ public function parent() { return $this->belongsTo(User::class, 'report_to'); } /** * 下级用户 */ public function children() { return $this->hasMany(User::class, 'report_to'); } /** * 获取启用的用户 */ public function scopeActive($query) { return $query->where('status', 1); } /** * 根据公司ID查找 */ public function scopeByCompany($query, int $companyId) { return $query->where('company_id', $companyId); } /** * 根据飞书用户ID查找 */ public function scopeByFeishuUserId($query, ?string $feishuUserId) { if ($feishuUserId === null) { return $query; } return $query->where('feishu_user_id', $feishuUserId); } /** * 根据飞书 UnionID 查找 */ public function scopeByFeishuUnionId($query, ?string $feishuUnionId) { if ($feishuUnionId === null) { return $query; } return $query->where('union_id', $feishuUnionId); } /** * 根据OpenID查找 */ public function scopeByFeishuOpenId($query, ?string $openId) { if ($openId === null) { return $query; } return $query->where('feishu_open_id', $openId); } /** * 搜索用户 */ public function scopeSearch($query, ?string $keyword) { if (!$keyword) { return $query; } return $query->where(function ($q) use ($keyword) { $q->where('name', 'like', "%{$keyword}%") ->orWhere('email', 'like', "%{$keyword}%") ->orWhere('phone', 'like', "%{$keyword}%") ->orWhere('sn', 'like', "%{$keyword}%"); }); } }