Yii2 İki Modelin Bir View'da Kullanımı


        Bir view'da normalde o view'ın modeli kullanılır. Ama birden fazla model kullanmamız gereken durumlar olabilir. Bu yazımda bunun nasıl yapılabileceği hakkında olacak.
  • İşe ilgili view'ın controller'ını düzenlemekle başlamak gerekir. Bunun için de o controller'da üzerinde çalışılacak olan action'a (metoda) başka bir modeli daha 'render' etmesini söylemeliyiz. Bunu şu şekilde yapıyoruz:
    return $this->render('update', [
        'model' =>$model,                       // Varsayılan model
        'model1' => $this->findOtherModel($id), // Yeni eklenen model.
    ]);

  • Burada dikkat edilmesi gereken nokta eklenen kısım eklenen modeldeki fonksiyon. Eğer biz findModel($id) demiş olsaydık bu fonksiyon bize varsayılan modeli döndürmüş olacaktı.
  • Bu sorunu çözmek için de adı findOtherModel yeni bir fonksiyon yazmamız gerekiyor.
    protected function findOtherModel($id)
    {
        $connection = \Yii::$app->db;
        $dii = $connection->createCommand("SELECT * FROM tablo_adi where sutun_adi = $id");
        return $dii->queryOne();
    }
  • Bu fonksiyonu da yazdıktan sonra geriye view dosyasının içerisinde kullanmak kalıyor. Basit bir örnek vereyim:
    use yii\widgets\DetailView; // Kodun en başına eklenmeli

    <?= DetailView::widget([
        'model' => $model1,
        'attributes' => [
            'sutun_adi',
            'sutun_adi2',
            'sutun_adi',
        ],
    ]) ?>

        Bu kod modelin kullandığı tablodan istenilen sütunların kullanıldığı bir tablo oluşturuyor. Böylece bir view'da birden fazla model kullanmış olduk. İyi çalışmalar diliyorum.