_search con dos modelos

Buenas tardes,

tengo un admin donde se muestran datos de dos modelos, que están relacionados entre si. Los datos se muestran correctamente, el problema que tengo es que no puedo hacer una búsqueda con campos del segundo modelo. No sé exactamente como programarlo en el search. Alguien tiene algún artículo que me pueda ayudar? O se ha encontrado con algo parecido?

Gracias!

en que yii lo quieres hacer?? seria,algo asi una tablaA con una FK de otra tabla(TablaB) y deseas filtrar por una campo de B, seria algo asi??

Muchas gracias por tu ayuda. Como comentas un search de la tabla con una FK de otra tabla(TablaB) y que puedas filtrar desde el search no desde el grid por campos de A y de B.

Gracias nuevamente.

Alguna idea? Gracias!!

Estoy en la misma situacion que guillemweb. Tengo la tabla Pelicula y Genero que se relacionan entre si, pude mostrar los generos en el grid, pero no puedo mostrar un combo para filtrar por genero.

Dejo captura del grid.

Modelo PeliculaSearch


<?php


namespace app\models;


use Yii;

use yii\base\Model;

use yii\data\ActiveDataProvider;

use app\models\Pelicula;


/**

 * PeliculaSearch represents the model behind the search form about `app\models\Pelicula`.

 */

class PeliculaSearch extends Pelicula

{

    public $generoNombre;

    /**

     * @inheritdoc

     */

    public function rules()

    {

        return [

            [['id', 'anio'], 'integer'],

            [['nombre', 'imdb'], 'safe'],

            [['generoNombre'], 'safe'],

        ];

    }


    public function scenarios()

    {

        return Model::scenarios();

    }

    

    public function search($params)

    {

        $query = Pelicula::find();


        $dataProvider = new ActiveDataProvider([

            'query' => $query,

        ]);


        $dataProvider->setSort([

            'attributes' => [

                'id',

                'anio',

                'imdb',

                'nombre',  

                'generoNombre'=>[

                    'asc' => ['genero.nombre' => SORT_ASC],

                    'desc' => ['genero.nombre' => SORT_DESC],


                ],

            ]

        ]);

        $this->load($params);

        if (!$this->validate()) {

            return $dataProvider;

        }

        

        $query->andFilterWhere([

            'public.pelicula.id' => $this->id,

            'anio' => $this->anio,

        ]);

        

        $query->andFilterWhere(['like', 'UPPER(public.pelicula.nombre)', strtoupper($this->nombre)])

            ->andFilterWhere(['like', 'imdb', $this->imdb]);

        

        //Esta linea todavia nose si funciona

        //->andFilterWhere(['like', 'genero', $this->codigo_genero]);    


        // filtro por nombre de genero

        $query->joinWith(['genero' => function ($q) {

            $q->where('"public"."genero"."nombre" LIKE \'%' . $this->generoNombre . '%\'');

        }]);

    

        return $dataProvider;

    }

}



Vista index


<?php


use yii\helpers\Html;

use yii\grid\GridView;

use yii\helpers\ArrayHelper;

/* @var $this yii\web\View */

/* @var $searchModel app\models\PeliculaSearch */

/* @var $dataProvider yii\data\ActiveDataProvider */


$this->title = 'Peliculas';

$this->params['breadcrumbs'][] = $this->title;

?>

<div class="pelicula-index">


    <h1><?= Html::encode($this->title) ?></h1>

    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>


    <p>

        <?= Html::a('Agregar Pelicula', ['create'], ['class' => 'btn btn-success']) ?>

    </p>

    

    <?= GridView::widget([

        'dataProvider' => $dataProvider,

        'filterModel' => $searchModel,

        'columns' => [

            ['class' => 'yii\grid\SerialColumn'],


            'id',

            'nombre',

            'generoNombre'=>[   'label'=>'Género',

                'value'=>'genero.nombre', 

            ],   

            'imdb',

            'anio',


            ['class' => 'yii\grid\ActionColumn'],

        ],

    ]); ?>


</div>



Saludos