Agregar expresión regular para validar email en un modelo de mongoose

Estoy intentando agregar una expresión regular y forme parte de las validaciones de mongoose y mongoose-unique-validator sin embargo no encuentro la forma de agregarlo. Lo podría hacer con node pero me gustaría tener todo centralizado. Quiero agregar una expresión regular de correo electrónico. Este es mi modelo

import mongos from 'mongoose' import validator from 'mongoose-unique-validator'   const schema = new mongos.Schema({      personal_data: {         name: {              type      : String,              required  : [ true, 'El nombre es necesario' ],              maxlength : [ 50, 'El nombre no puede exceder los 50 caracteres'],             minlength : [ 3, 'El nombre debe contener 3 o más caracteres']          },         last_name:  {              type      : String,              required  : [ true, 'El apellido es necesario' ],              maxlength : [ 100, 'El apellido no puede exceder los 50 caracteres'],             minlength : [ 3, 'El apellido debe contener 3 o más caracteres'],         },         user_name:  {              type: String,              unique    : [ true, 'El usuario está duplicado' ],              required  : [ true, 'El usuario es necesario' ],              maxlength : [ 25, 'El usuario no puede exceder los 25 caracteres'] },         email: {              type      : String,              unique    : [ true, 'El correo está duplicado'],              required  : [ true, 'El correo es necesario' ],              maxlength : [ 100, 'El correo no puede exceder los 100 caracteres'] },         gender:     { type: Number, maxlength: 1 }     },      company_data: {         role          : { type: mongos.Schema.Types.ObjectId, ref: 'Role' },         area          : { type: mongos.Schema.Types.ObjectId, ref: 'Area'  },         permissions: [{             module: { type: mongos.Schema.Types.ObjectId, ref: 'Module' },             chmod:  { type: String, min: 1, max: 5, default: 'r' }         }]      },     engine_data: {         password:   { type: String },         last_login: { type: Date },         addedBy:   { type: String },         addedDate: { type: Date, default: Date.now },         modification  : [{             _id       : false,             user      : { type: mongos.Types.ObjectId, ref: 'User' },             date      : { type: Date, default: Date.now },             updated   : { type: Array }         }]     } }, { collection: 'users' })  schema.plugin( validator, {  message: 'Ya existe el correo o ID {VALUE} en la base de datos' } )  const UserModel = mongos.model('User', schema )  export default UserModel 

me imagino algo así

email: {              type      : String,              unique    : [ true, 'El correo está duplicado'],              required  : [ true, 'El correo es necesario' ],              maxlength : [ 100, 'El correo no puede exceder los 100 caracteres'],             regex     : function( value ) {               var re = /^(([^<>()\[\]\.,;:\s@"]+(\.[^<>()\[\]\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$  /;               return re.test(String(value).toLowerCase());             }  }, 

No tengo idea de hecho si está en la capabilidad de mongoose

Agradezco toda ayuda

Como gravar um modelo Card contente vários itens em CakePHP2.x

Estou tentando gravar os itens de um carrinho em um modelo Card eu consigo obter os itens do carrinho passando o id da sessão do usuário, mas gostaria de saber como gravar em itens em associados a Orders e OrderProducts uando CakePHP2.x, segue o método na controller.

  public function payment_free($  product_id = null){      $  this->__verifySecurity( Group::CLIENTE );     if( $  product_id ){          //$  product_id = base64_decode($  product_id);         $  this->loadModel('Cart');         $  carts = $  this->Cart->__getCartsInSession($  this->Session->id());          $  this->loadModel('Product');         $  product = $  this->Order->OrderProduct->Product->__getProduct($  product_id);          $  method_id = Method::PRODUTO_ZERADO;          $  infoPayment = [             Method::PRODUTO_ZERADO => 'Produto Zerado',             Method::CUPOM_100_PORCENTO => 'Cupom 100%'         ];          $  data = [];         $  data['Order']['approved']  = date('Y-m-d H:i:s');         $  data['Order']['client_id'] = $  this->Auth->user('client_id');         $  data['Order']['method_id'] = $  method_id;         $  data['Order']['payment']   = $  infoPayment[$  method_id];         $  data['Order']['status']    = $  this->Order->Payment->getStatusAprovado();         $  data['Order']['value']     = '0.00';         $  data['Order']['value_discount'] = '0.00';         $  data['Order']['sessionid'] = $  this->Session->id();          $  data['OrderProduct'][0]['product_id'] = $  product_id;         $  data['OrderProduct'][0]['amount'] = 1;         $  data['OrderProduct'][0]['value'] = '0.00';         $  data['OrderProduct'][0]['discount'] = '0.00';          if( $  this->Order->saveAll($  data) ){             $  this->Session->setFlash('Curso Grátis obtido com sucesso!', 'site/popup-success');             $  this->__clearCart($  this->Session->id());             $  this->__clearTicket();             return $  this->redirect(array('controller'=>'virtual_rooms','action' => 'mycourses', 'prefixes' => false));         }         else{             $  this->Session->setFlash('Não foi possível obter o curso grátis!', 'site/popup-error');             return $  this->redirect( $  this->referer() );         }     }     else{         $  this->Session->setFlash('Não foi possível identificar o curso desejado!', 'site/popup-error');         return $  this->redirect( $  this->referer() );     } } 

Eliminar y actualizar un modelo relacionado en php laravel

he estado trabajando en una app web tipo encuesta por medio de estapas – preguntas – respuestas, ahora mismo ya tengo la parte de guardar las respuestas de cada pregunta y las preguntas en su respectiva etapa, pero en el momento de actualizar o eliminar una etapa, queda actualizada con la ultima informacion, pero por ejemplo si elimine un pregunta, no aparece visualmente, pero en la base de datos queda la pregunta con sus respuestas ocupando espacio

EstapasEdit.blade.php

@extends('layouts.layout')  @section('content')      <form action="/dashboard/formulario/stages/{{ $  stage->id }}" method="post">         @method('put')         <h2>ETAPA</h2>         <label>Titulo</label>         <input required type="text" name="title" value="{{ $  stage->title }}">         <label>Descripcion</label>         <input required type="text" name="description" value="{{ $  stage->description }}">          <h2>PREGUNTAS</h2>         <table>             <tbody>             @foreach($  questions as $  question)                 <tr>                     <td><input required name="questions[{{ $  question->id }}]" type="text" value="{{ $  question->title }}" ><td/>                     <td>                         <select name="types[{{ $  question->id }}]" id="">                             @foreach($  types as $  type)                                 @if($  type->name == $  question->type->name)                                     <option selected value="{{ $  type->id }}">{{ @strtoupper($  type->name) }}</option>                                 @else                                     <option value="{{ $  type->id }}">{{ @strtoupper($  type->name) }}</option>                                 @endif                             @endforeach                         </select>                     </td>                     <td>                         <fieldset>                             <legend>Respuestas</legend>                             @foreach($  question->answers as $  answer)                                      @if($  question->type->name == App\Type::OPCIONES['U'])                                         <input required name="answers[{{ $  question->id }}][{{ $  answer->id }}]" type="text" value="{{ $  answer->title }}">                                      @elseif($  question->type->name == App\Type::OPCIONES['C'])                                         <input required name="answers[{{ $  question->id }}][{{ $  answer->id }}]" type="text" value="{{ $  answer->title }}">                                      @elseif($  question->type->name == App\Type::OPCIONES['M'])                                         <input required name="answers[{{ $  question->id }}][{{ $  answer->id }}]" type="text" value="{{ $  answer->title }}">                                      @endif                              @endforeach                         </fieldset>                                 <a href="">Agregar</a>                      </td>                 </tr>             @endforeach             </tbody>         </table>          <input class="btn btn-primary" type="submit" value="Guardar">     </form>  @endsection 

Modelo Etapa

class Stage extends Model {      protected $  fillable = [         'id',         'title',         'description'     ];      public function questions(){         return $  this->hasMany('App\Question');     }  } 

Modelo Pregunta

class Question extends Model {     protected $  table = 'questions';     protected $  fillable = [         'id',         'title',         'stage_id',         'type_id',     ];      public function stage() {         return $  this->belongsTo('App\Stage');     }      public function type(){         return $  this->belongsTo('App\Type');     }      public function answers(){         return $  this->hasMany('App\Answer');     }  } 

Modelo Respuesta

class Answer extends Model {      public function __construct(array $  attributes = ['title'])     {         parent::__construct($  attributes);     }      protected $  table = 'answers';     protected $  fillable = [         'title',         'question_id'     ];      public function question() {         return $  this->belongsTo('App\Question');     }      public static function create(array $  array) {         $  answers = [];           return $  answers;     }  } 

Parte del controlador que actualiza

public function update(Request $  request, Stage $  stage) {      $  rules = [         'title' => 'max:150|string|unique:stages',         'description' => 'max:250|string'     ];      $  stage = Stage::findOrFail($  stage)->first();      if ($  request->get('title') != $  stage->title ||         $  request->get('description') != $  stage->description) {          $  this->validate($  request, $  rules);         $  stage->title = $  request->get('title');         $  stage->description = $  request->get('description');          $  stage->save();     }      /*--------- SE RECORRE TODAS LAS PREGUNTAS  ---------*/     foreach ($  request->get('questions') as $  id_q => $  question) {         $  question_test = new Question([             'id' => $  id_q,             'title' => $  question         ]);         $  type = Type::findOrFail($  request->get('types')[$  id_q]);          /*--------- SE ACTUALIZA LOS DATOS DE LA PREGUNTA ---------*/         $  question_test->stage()->associate($  stage);         $  question_test->type()->associate($  type);          if ($  question_test->title == '') {             /*TODO: AGREGAR ENVIO DE ERROR*/         }          $  question_test = Question::updateOrCreate([             'id' => $  question_test->id         ],[             'title' => $  question_test->title,             'stage_id' => $  question_test->stage_id,             'type_id' => $  question_test->type_id         ]);          /*--------- SE ACTUALIZA LOS RESPUESTAS DE LA PREGUNTA ---------*/         foreach ($  request->get('answers') as $  key => $  answers) {             if ($  id_q == $  key) {                 foreach ($  answers as $  id_a => $  answer) {                      if ($  answer == '') {                         /*TODO: AGREGAR ENVIO DE ERROR*/                     }                      $  question_test->answers()->updateOrCreate([                         'id' => $  id_a                     ],[                         'title' => $  answer                     ]);                  }             }         }      }      return redirect('/dashboard/formulario/stages');  } 

Como aplico un modelo ya entrenado a nuevas observaciones?

Buen día a todos tengo una duda que quizas este mas enfocada a un DataEngineer pero espero alguien pueda apoyarme….Tengo una base de Datos en Amazon RedShift con 300 millones de observaciones, quiero generar modelos de clasificación a traves de muestras, y dejar esos modelos ya entrenados para que cuando se actualicen los values de mis tablas poder etiquetar a que clase pertenecen las nuevas observaciones, así como las que ya existian y han cambiado o entrado en una nueva clase.

Ejemplo si una señora ademas de ser nadadora, se ha convertido en mama, o si una nueva observacion cumple las reglas para clasificarse como golfista, etc.

Cual es el workflow correcto para ingestar esta Data, aplicar el modelo y volver a cargar a redshift con su nueva etiqueta de clase?

Saludos y les agradecería mucho el apoyo.

System.InvalidOperationException: el tipo de entidad IdentityRole no forma parte del modelo para el contexto actual

Me sale error cuando quiero crear un rol dice que esta fuera de contexto me pueden ayudar no se cual es el problema con mi codigo

if (User.Identity.IsAuthenticated)             {                 using (ValoresJuntasContext db1 = new ValoresJuntasContext())                 {                     var usuarioActual = User.Identity.GetUserId();                     var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(db1));                     //crear rol                      var resultado = roleManager.Create(new IdentityRole("Consulta"));                     var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db1));                                          //Agregar usuario a rol                     resultado = userManager.AddToRole(usuarioActual, "Consulta");                      //Usuario esta en rol?                     var usuarioEstaEnRol = userManager.IsInRole(usuarioActual, "Consulta");                     var usuarioEstaEnRol2 = userManager.IsInRole(usuarioActual, "Usuario");                      ViewBag.IsConsulta = resultado;                 }             }

¿Hay que crear un modelo por tabla o puede haber un modelo para varias tablas?

Dispongo de varias tablas en la base de datos, cada una con unas 500-1000 filas.

  • TablaPreguntasMatematicas
  • TablaPreguntasCienciasNaturales
  • TablaPreguntasCienciasSociales
  • TablaPreguntasTecnologia
  • TablaPreguntasFisica
  • TablaPreguntasQuimica
  • TablaPreguntasMusica

La duda es: ¿Puedo crear un sólo modelo por ejemplo llamado “ModeloPreguntas” para todas las tablas, o cada tabla debe tener su correspondiente y propio modelo en Laravel?

Gracias.

Pasar Variables del modelo a la vista en PHP Puro

tengo un login, quiero que los datos del login pase al controlador que ya lo hice y quedo así

public function userLoginController() {     if(isset($  _POST['login'])) {         if(preg_match('/^[a-zA-Z0-9_.-]+$  /', $  _POST['user_name'])) {             $  datosController = array("user_name"=>$  _POST['user_name'],                                      "user_password"=>$  _POST['user_password']);             $  reply = Crud::userLoginModel($  datosController, "users");         } else {             echo "Error al ingresar";         }     } } 

Ahora deseo que eso datos me lleguen al modelo para hacer la verificación la cual lo tengo así

public function userLoginModel($  datosModel, $  tabla) {     $  stmt = Conexion::getConnection()->prepare("SELECT complete_name, user_name, user_email, user_password FROM $  tabla WHERE user_name = :user_name AND user_password = :user_password");     $  stmt->bindParam(":user_name", $  datosModel['user_name'], PDO::PARAM_STR);     $  stmt->bindParam(":user_password", $  datosModel['user_password'], PDO::PARAM_STR);     $  stmt->execute();     return $  stmt->fetch();     $  stmt->close(); } 

No sé si hasta aquí vaya bien, deseo que el return de stmt me llegue a la vista para mostrar los campos que seleccione de la db al usuario, me podrian ayudar completando el codigo php de la vista porfa, se lo agradeceria mucho.

Gracias por su atención prestada.

¿Como obtener el campo en un modelo desde otro modelo, en Django?

Tengo dos modelos en una app, el primer modelo consiste en que yo creo un consejero, el consejero se crea con un user(y unos cuantos datos), es decir debo crear un usuario con privilegios bajos y lo registro como consejero.

El segundo modelo consiste en crear un aconsejado, con unos datos y le asigno un consejero(un aconsejado solo puede tener un consejero, el aconsejado no nesesita user).

Aquí los modelos:

class Adviser(models.Model):     user = models.ForeignKey(User, on_delete = models.CASCADE, verbose_name = 'Usuario')     first_name = models.CharField(max_length = 100, verbose_name = 'Nombre')     last_name = models.CharField(max_length = 100, verbose_name = 'Apellido')     created = models.DateTimeField(auto_now_add = True, verbose_name = 'Fecha de Creasion')     updated = models.DateTimeField(auto_now = True, verbose_name = 'Fecha de Edicion')      class Meta:         verbose_name = 'consejero'         verbose_name_plural = 'consejeros'      def __str__(self):         return self.first_name   class Advised(models.Model):     first_name = models.CharField(max_length = 100, verbose_name = 'Nombre')     last_name = models.CharField(max_length = 100, verbose_name = 'Apellido')     adviser = models.ForeignKey(Adviser, on_delete = models.CASCADE,verbose_name = 'Consejero')     created = models.DateTimeField(auto_now_add = True, verbose_name = 'Fecha de Creasion')     updated = models.DateTimeField(auto_now = True, verbose_name = 'Fecha de Edicion')      class Meta:         verbose_name = 'aconsejado'         verbose_name_plural = 'aconsejados'      def __str__(self):         return self.first_name 

En una app diferente tengo un modelo, consiste en que un consejero, le asigna calificaciones a sus aconsejados asignados(en su sesión activa) el problema surge que me aparecen aconsejados que no están asignados al consejero que esta loggeado, Entonces lo que intento hacer, es atraves de la ForeignKey del modelo del aconsejado(Advised) que se relaciona con el modelo consejero(Adviser) obtener su user y así poner en el advised = models.OneToOneField del modelo AdministrationOfCounseled los aconsejados correspondientes del consejero con la sesión activa.

Aqui el modelo AdministrationOfCounseled:

class AdministrationOfCounseled(models.Model):     adviser = models.OneToOneField(Adviser, on_delete = models.CASCADE, verbose_name = 'Consejero/a', default = Adviser)     advised = models.OneToOneField(Advised, on_delete = models.CASCADE, verbose_name = 'Aconsejado/a', unique = True)      # Campos de calificasiones.....      class Meta:         verbose_name = 'administracion de aconsejado'         verbose_name_plural = 'administracion de aconsejados'      def __str__(self):         return str('') 

Tan bien díganme si esta es la mejor o hay otra mejor forma o no, de hacer esto

Desde ya Gracias por sus Respuestas!

Modelo Vista Controlador en Java y MySQL

Tengo el siguiente problema, cuando compilo mi programa este corre sin ningun error sin embargo este no se conecta a la base de datos, alguien que me pueda ayudar a resolver este problema. Aqui anexo la conexion que he realizado ManejadorDB y el controlador.

    import modelo.ModeloProducto; import vista.frmInventario; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; //import modelo.dbPersistencia; import modelo.dbProducto;   public class ControladorProducto implements ActionListener{      int cont = 1;      DefaultTableModel modelotabla = new DefaultTableModel();      private frmInventario forminventario;     private ModeloProducto producto;     private dbProducto dbproducto = new dbProducto();      ArrayList<Float> precios = new ArrayList<>();      public ControladorProducto(frmInventario frminventario, ModeloProducto producto) {         this.forminventario = frminventario;         this.producto = producto;          this.forminventario.btnAgregar.addActionListener(this);         this.forminventario.btnEditar.addActionListener(this);         this.forminventario.btnEliminar.addActionListener(this);         this.forminventario.btnGuardar.addActionListener(this);         this.forminventario.btnImprimir.addActionListener(this);         this.forminventario.btnRetirar.addActionListener(this);          iniciarVista();     }      public void iniciarVista(){         this.forminventario.setTitle("INVENTARIO UPMYS");         clean();         titulos();         this.forminventario.setVisible(true);     }      public void limpiarTabla(){         int a = this.forminventario.tbProducto.getRowCount() - 1;         for (int i = a; i >= 0; i--) {             modelotabla.removeRow(modelotabla.getRowCount() - 1);         }     }      public void clean(){         producto.setId(dbproducto.recuperarCodigo());         this.forminventario.txtId.setText(String.valueOf(producto.getId()));          this.forminventario.txtCodigo.setText("");         this.forminventario.txtDescripcion.setText("");         this.forminventario.txtNombre.setText("");         this.forminventario.txtPrecio.setText("");         this.forminventario.txtStock.setText("");     }      public void titulos() {         modelotabla.addColumn(cont++);         modelotabla.addColumn("NOMBRE");         modelotabla.addColumn("CODIGO");         modelotabla.addColumn("DESCRIPCION");         modelotabla.addColumn("PRECIO");         modelotabla.addColumn("STOCK");          this.forminventario.tbProducto.setModel(modelotabla);     }      public void agregarTabla() {         String datostabla[] = new String[6];          datostabla[0] = String.valueOf(this.forminventario.txtId.getText());         datostabla[1] = String.valueOf(this.forminventario.txtCodigo.getText());         datostabla[2] = String.valueOf(this.forminventario.txtNombre.getText());         datostabla[3] = String.valueOf(this.forminventario.txtDescripcion.getText());         datostabla[4] = String.valueOf(Float.parseFloat(this.forminventario.txtPrecio.getText()));         datostabla[5] = String.valueOf(this.forminventario.txtStock.getText());          modelotabla.addRow(datostabla);         this.forminventario.tbProducto.setModel(modelotabla);     }      public void mostrarDatos() {         this.forminventario.txtCodigo.setText(String.valueOf(producto.getCodigo()));         this.forminventario.txtNombre.setText(String.valueOf(producto.getNombre()));         this.forminventario.txtDescripcion.setText(String.valueOf(producto.getDescripcion()));         this.forminventario.txtPrecio.setText(String.valueOf(producto.getPrecio()));         this.forminventario.txtStock.setText(String.valueOf(producto.getStock()));          this.forminventario.txtCodigo.setText("");         this.forminventario.txtNombre.setText("");         this.forminventario.txtDescripcion.setText("");         this.forminventario.txtPrecio.setText("");         this.forminventario.txtStock.setText("");     }      @Override     public void actionPerformed(ActionEvent e) {         if (e.getSource() == this.forminventario.btnAgregar) {              /*this.forminventario.txtCodigo.getText();             this.forminventario.txtNombre.getText();             this.forminventario.txtDescripcion.getText();             this.forminventario.txtPrecio.getText();             this.forminventario.txtStock.getText();*/              mostrarDatos();          } else if (e.getSource() == this.forminventario.btnGuardar) {             try {                 dbproducto.insertar(producto);                 clean();                 limpiarTabla();                 JOptionPane.showMessageDialog(forminventario, "REGISTRO GUARDADO!");             }              catch (Exception ex) {                 Logger.getLogger(ControladorProducto.class.getName()).log(Level.SEVERE, null, ex);             }         }     } } 

    import java.sql.*;  public abstract class ManejadorDB {          protected Connection conexion;         protected PreparedStatement sqlConsulta;         protected ResultSet registros;         private String drive;         private String url;         private String user;         private String password;         private String database;          //CONSTRUCTORES               public ManejadorDB() {         this.drive = "com.mysql.jdbc.Driver";         this.database = "inventario";         this.user = "root";         this.password = "";         this.url = "jdbc:mysql://localhost/inventario";     }      public ManejadorDB(String drive, String database, String user, String password) {         this.drive = drive;         this.database = database;         this.user = user;         this.password = password;         this.url = "jdbc:mysql://localhost/" + this.database;     }      public ManejadorDB(ManejadorDB objDB){         this.drive = objDB.drive;         this.database = objDB.database;         this.user = objDB.user;         this.password = objDB.password;         this.url = "jdbc:mysql://localhost/" + this.database;     }         //GET Y Y SET DE ATRIBUTOS      public Connection getConnection() {         return conexion;     }      public void setConnection(Connection conexion) {         this.conexion = conexion;     }      public PreparedStatement getPreparedStatement(){         return sqlConsulta;     }      public void setPreparedStatement(PreparedStatement sqlConsulta){         this.sqlConsulta = sqlConsulta;     }      public ResultSet getResultSet(){         return registros;     }      public void setResultSet(ResultSet registros){         this.registros = registros;     }      public String getUrl() {         return url;     }      public void setUrl(String url) {         this.url = url;     }      public String getUser() {         return user;     }      public void setUser(String user) {         this.user = user;     }      public String getPassword() {         return password;     }      public void setPassword(String password) {         this.password = password;     }      public String getDatabase() {         return database;     }      public void setDatabase(String database) {         this.database = database;     }      public String getDrive() {         return drive;     }      public void setDrive(String drive) {         this.drive = drive;     }      //METODOS PARA CONECTAR Y DESCONECTAR LA BASE DE DATOS      public void connect() {         try {             Class.forName(this.getDrive());         }          catch (ClassNotFoundException e) {             System.err.println("Surgio un error al conectar " + e.getMessage());             System.exit(-1);         }          try {             this.setConnection(DriverManager.getConnection(                 this.getUrl(),                 this.getUser(),                 this.getPassword()));         }         catch (SQLException e) {             System.err.println("Surgio un error al conectar" + e.getMessage());         }     }      public void desconectar() {         try {             if (!this.conexion.isClosed())this.getConnection().close();         }          catch (SQLException e) {             System.err.println("Surgio un error" + e.getMessage());         }     } }