Obtener todos los valores de un join doble con active records

Buenos días, estoy realizando una consulta con active record de un join con dos tablas, y me gustaría obtener los datos de las tres tablas, la sentencia es:

$consulta = Feeds::find()->select(['usuarios.*','seguidores.*', 'feeds.*'])->innerJoin('usuarios', 'usuarios.id = feeds.usuariosid')->leftJoin('seguidores', 'seguidores.usuario_id=feeds.usuariosid')->all();

Luego en la vista, hago lo siguiente, tras pasarsela a la vista:

 <?php foreach ($feeds as $feeds) :?>

Y si hago un var_dump de $feeds; solo obtengo los valores de la tabla feeds, no del resto y nos lo puedo consultar ¿Alguien puede ayudarme?

Gracias.

Hola alfredobp, en tu query estas a usar directamente los metodos innerJoin y leftJoint , estos metodos estan a hacer on leftjoin normal sin cargar en tu model los datos
Puedes reoslver tu problema de 2 maneras
1 ) Colocando asArray(), esto te va a retornar tu queyr como array , si necesitas el model, usa la opcion de abajo , btw : no es necesario hacer el select en tu caso porque estas haciendo siempre un table.*

$consulta = Feeds::find()
->innerJoin(‘usuarios’, ‘usuarios.id = feeds.usuariosid’)->leftJoin(‘seguidores’, ‘seguidores.usuario_id=feeds.usuariosid’)
->asArray()
->all();

  1. usando joinWith este metodo have una relacion leftjoin con tu relacion directamente en tu model
    SI te da error el codigo de abajo revisa si la relacion se llama asi en tu model
    ejemplo:

$consulta = Feeds::find()
->joinWith(‘usuarios’, true, ‘INNER JOIN’)
->joinWith(‘seguidores’)
->all();

Saludos

Gracias, me funciono a la perfección. Aprovecho la respuesta para preguntar si alguien puede ayudarme a realizar con una sentencia conformada por un where compuesto por un and en active record.

Me explico, en sql sería la condición del where sería:

` … where feeds.usuariosid = 1 or ( feeds.created_at > seguidores.fecha_seguimiento and seguidores.usuario_id = 1 ) ;

Esta sentencia la paso a active records:

consulta = Feeds::find()->leftJoin('seguidores', 'seguidores.seguidor_id=feeds.usuariosid')->leftJoin('usuarios', ->andWhere('feeds.usuariosid=1') ->orWhere('seguidores.usuario_id=1')->andWhere('feeds.created_at>seguidores.fecha_seguimiento') ->asArray()->all();

Y me lo retorna como una única condición de where, no como dos separadas. Gracias por su tiempo.

1 Like

Solucionado, en invertido las sentencias y ha funcionado de forma correcta. Gracias!