Dudas de cakephp » dudas

listas en orden aleatorio con cakephp

(2 mensajes)
  1. yoelkj
    Miembro

    Hola.. soy nuevo en este blog y me alegra mucho haber encontrado este sitio en español.

    tengo dos dudas la primera es como hacer consultas que me muestren listas en orden aleatorio. al mmostrar la paginas mostrara un resutado y al actualizarla mostrara la misma lista pero en otro orden.

    la otra duda es acerca de las convenciones de cakephp para los modelos. tengo la tabla usuarios y una tabla usuario_amigos eh tratado de hacer una relacion de muchos a muchos pero la misma tabla usuario son amigos

    agradezco su atencion y su pronta ayuda... gracias.. y felicidades por el blog.. me pasare revisando los temas para no hacer preguntas repetidas .. :D gracias

    Publicado hace 2 years #
  2. bernal
    Maestro de Llaves

    Antes de nada, bienvenido al blog, se agradecen tanto vuestras visitas como vuestra colaboración.

    Vayamos por orden:

    La primera duda, mostrar los listados con un orden aleatorio es sencillo, para eso utilizaremos la función RAND de MySQL, para eso, habrá que llamar al find del modelo de la siguiente forma

    $this->Modelo->find('all', array('order' => 'RAND()'));

    De esta forma, cada vez que actualizases cambiará el orden de los elementos que te muestra.
    Esta función no es demasiado eficiente, podrás usarla sin problemas con pocos elementos, pero a la hora de usarla sobre muchos elementos sería mejor utilizar algún modo no tan directo, como ordenar el array con los datos en el controlador antes de pasarlo a la vista.

    En cuanto a la segunda duda, para las relaciones N:M, como la del ejemplo que me comentas, cakephp tiene hasAndBelongsToMany.
    Se utilizará esta relación ya que cada usuario puede tener muchos amigos y además ser amigo de muchos usuarios.
    El funcionamiento es sencillo, habría que crear una tabla intermedia, podremos utilizar la tabla que me indicas en tu post usuario_amigos, esta tendrá tres campos, un id, id_usuario y id_amigo.
    Habrá que modificar el modelo usuario para establecer la asociación, será algo como esto:

    # class Usuario extends AppModel {
    # var $name = 'Usuario
    # var $hasAndBelongsToMany = array(
    # 'Amigos' =>
    # array(
    # 'className' => 'Usuario',
    # 'joinTable' => 'usuario_amigos',
    # 'foreignKey' => 'usuario_id',
    # 'associationForeignKey' => 'amigo_id',
    # 'unique' => true,
    # 'conditions' => '',
    # 'fields' => '',
    # 'order' => '',
    # 'limit' => '',
    # 'offset' => '',
    # 'finderQuery' => '',
    # 'deleteQuery' => '',
    # 'insertQuery' => ''
    # )
    # );
    # }

    Con esto, al hacer un find de los usuario te aparecerá una lista con sus amigos y también los usuarios de los que es amigo.

    El código es orientativo, no lo he probado, por lo que no puedo confirmar que funcione directamente, si tienes algún problema al utilizarlo avisa e intentaré ayudarte.

    Espero haber solucionado tus dudas. Un saludo.

    Publicado hace 2 years #

RSS feed for this topic

Responder

Marcas permitidas: BBcode a blockquote code em strong ul ol li img font strike center u hr.
También puedes poner código entre comillas simples ( ` ).


Clickcha - The One-click Captcha