where('driver_id', $value); } public function searchIsReadAttribute($query, $value, array $params): mixed { if (empty($value)) { return $query; } return $query->where('is_read', $value); } public function searchIdAttribute($query, $value, array $params): mixed { if (empty($value)) { return $query; } return $query->where('id', $value); } public static function add(array $params) { $insert = array_merge($params,[ 'status' => 1, 'create_time' => time() ]); return self::query()->insertGetId($insert); } public static function edit(int $id, array $params) { unset($params['id']); $insert = array_merge($params,[ 'update_time' => time() ]); $query = self::query()->where('id',$id); return $query->update($insert); } /** * 获取未读消息数量 * @param int $driver_id * @return int */ public static function getNumByDriverId(int $driver_id) { return self::query() ->leftJoin('driver_message_read',function ($join) use ($driver_id){ $join->on('driver_message.id','=','driver_message_read.message_id') ->where('driver_message_read.driver_id',$driver_id); }) ->whereIn('driver_message.driver_id',[0,$driver_id]) ->whereNull('driver_message_read.id')->count(); } public static function read(int $driver_id) { $read = self::query() ->leftJoin('driver_message_read',function ($join) use ($driver_id){ $join->on('driver_message.id','=','driver_message_read.message_id') ->where('driver_message_read.driver_id',$driver_id); }) ->whereIn('driver_message.driver_id',[0,$driver_id]) ->whereNull('driver_message_read.id') ->pluck('driver_message.id'); $time = time(); foreach ($read as $message_id) { $data[] = [ 'driver_id' => $driver_id, 'message_id' => $message_id, 'create_time' => $time ]; } !empty($data) && DriverMessageReadModel::query()->insert($data); } /** * 数据处理器 * @param $value * @param $params * @return string */ public function dataCreateTimeAttribute($value,$params) { if (empty($value)){ return '---'; } if (date('Y-m-d',$value) == date('Y-m-d')){ return date('H:i:s',$value); } return date('Y-m-d H:i:s',$value); } public function driver() { return $this->hasOne(DriverModel::class,'id','driver_id'); } public function reads() { return $this->hasOne(DriverMessageReadModel::class,'message_id','id'); } }