Ayuda Con Ralacion Entre Tablas Con Yii 2

Hola estimado amigos de la comunidad Yii, soy bastante nuevo y recientemente comence a utilizar Yii2 y me gustaria saber si me podrian guiar un poco en la utilizacion de relaciones entre tablas. Las cuales ya las tengo creadadas desde navicat y las tablas fueron creadas con gii con su opcion de relaciones activadas. Pero no se como verificar que este funcionando. Desde ya muchas Gracias.

No he usado Yii 2 pero en la versión que uso (Yii 1).

En yii 1 en el modelo debes encontrar algo como esto:




public function relations()

{

   return array(

      ....

   );

}



Allí tendrás tus relaciones por ejemplo yo tengo una clase llamada Afiliados que contiene un campo id_empresa que se relaciona con mi modelo Empresa y se ve así:

EN MI CLASE AFILIADOS:




public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'idEmpresa' => array(self::BELONGS_TO, 'Empresa', 'id_empresa'),

		);

	}



EN MI CLASE EMPRESA:




public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'afiliados' => array(self::HAS_MANY, 'Afiliados', 'id_empresa'),

		);

	}



Para acceder a ella en las vistas de mi modelo Afiliados pondré algo así como ‘idEmpresa.nombre’ suponiendo que mi modelo empresa tiene un campo llamado nombre.

EStimado agradesco la respuesta y estas en lo correcto en la version anterior de yii eso es asi, principalmente por eso surge mi duda ya que ahora ya no se encuentra esa funcion y se a modificado un poco el codigo. Desde ya muchas gracias.

He hecho una prueba rapida y al parecer ya no existe una sola función que concentre las relaciones si no que se crea una función por cada relación por ejemplo si tengo dos tablas una de clientes y otra de contactos donde la tabla contactos tiene un foreign key id_cliente se genera lo siguiente.


public function getIdCliente()

{

    return $this->hasOne(Clientes::className(), ['id' => 'id_cliente']);

}

Y seria lo mismo por cada relación.

Y le podemos cambiar el nombre


public function getIdCliente0()

{

    return $this->hasOne(Clientes::className(), ['id' => 'id_cliente']);

}

de modo que cuando se haga $model->id_cliente0->nombre nos devuelva el nombre del cliente al que pertenece el contacto

Agradezco mucho tu ayuda, estoy intentando realizarlo aunque me esta dando un error, si no fuera mucha molestia me podrias esplicar un poco mas detallamente como haces para recuperar la informacion ya que al parecer mi problema esta en el momento de recuperar la informacion. lo estoy realizando de esta forma. Gracias

esta es la accion e mi controlador

[color="#4169E1"]public function actionIndex()

{


    $model = Sorteo::find();


    print_r($model->getPremios);


    Yii::$app->end();


}[/color]

y en el modelo tengo esta funcion creada por gii

[color="#4169E1"]public function getPremios()

{


    return $this->hasMany(Premios::className(), ['id_sorteo' => 'id']);


}[/color]

me podrias indicar donde esta mi error?

Para recuperar la información de la relación puedes hacerlo de 2 formas, una como metodo y otra como atributo.

Para recuperarla como metodo es con $model->getPremios()

Para recuperarla como atributo es con $model->premios

Tu error es que lo intentas recuperar como metodo pero te faltan los parentesis

a1832 Gracias nuevamente por tu repsuesta tan rapida, la acotacion su de suma ayuada para poder entender mejor tu explicacion anterior, desgraciadamente mi error principal se encontraba en mi absurda ignorancia en darme cuenta que estaba recuperando un conjunto de datos y para eso debia recorrerlos para obtener una unica fila antes de poder consultarlo de la forma que me indicas. Quedando de la siguiente manera. Gracias




public function actionIndex()

    {

        /*para recuperar solo 1 datos de la tabla */

        $model = Sorteo::findOne(14);

       

        echo '<pre>';

          print_r($model->getPremios());

        echo '</pre>';

       

       /*para recuperar todos los datos de la tabla con un limit de 3*/

        $model = $models->orderBy('id')

            ->offset(0)

            ->limit(10);

        

        foreach($model as $d)

        {

            echo '<pre>';

             print_r($d->getPremios());

            echo '</pre>';   

        }

        Yii::$app->end();


        return $this->render('index');

    }