inner join kullanımı

arkadaşlar merhaba,

bir arkadaşımın tavsiyesi üzerine yii ile tanıştım,

framework ile de çalışmaya yeni başladım diyebilirim, daha önce hiç bir framework ile çalışmadım,

sizden çok önemli bir ricam var,

2 ayrı tablom var ve ikisinden de bazı verileri almam lazım.

örnek : uyeler tablosu (uye_id,kullanıcı_adı,uye_adi,soyadi,kayıt_tarihi…vs)

detaylar tablosu(detay_id,uyeler_id,uye_turu,vs.vs.vs.)

(tek tablo kullan diyebilirsiniz ama 2 ayrı tablo kullanmam şart)

bunu normal php sayfası ile innerjoin ile alıyorum fakat yii’de,bunu beceremedim.

rica ediyorum bir arkadaşımız bana bunları nerede kullanacağım ile ilgili bir örnek verebilirmi? ya da, bana nasıl yapılacağını anlatabilirmi? 3-4 gündür araştırıyorum fakat nasıl yapabileceğimi bulamadım.

şimdiden teşekkürlerimi sunuyorum.

Bu sayfa yardımcı olur zannedersem.

http://www.yiiframework.com/doc/guide/1.1/en/database.arr

teşekkürler, şimdi inceliyorum.

ingilizcem de çok iyi olmadığı için, olayın mantığını anlamam için neyin nereye?

yani controllere neleri, modellere neleri ve viewlere neleri koymam gerektiği konusunda çok ufakta olsa bir bilgi verebilirmisiniz bana? çok basitte olsa bir örnek dosyası varmı?

eğer bu mantığı çözersem ilerleyebileceğim kanısındayım.

tekrar teşekkür ediyorum ilgilerinize.

Merhaba @psatha,

Tablo ismi: uyeler

İlişkili tablo ismi: detaylar

ilişki türü: one-to-one (birebir)

ilişkili alan: uyeler_id (detaylar tablosu)

/models/Uyeler.php dosyandaki ilişkilerin tanımlandığı relations metodunuzda ilişkiyi tanımlamanız sizin için yeterli olacaktır.




public function relations()

{

	return array(

		'detay'=>array(self::HAS_ONE, 'detaylar', 'uyeler_id'),

	);

}



Controller dosyanızdaki sorgularınızda şu şekilde kullanabilirsiniz,




//Uyeler modelinizdeki tanımlı olan "detay" ilişkisi ile birlikte üyeler tablosundaki tüm bilgiler getirilir,

$uyeList = Uyeler::model()->with('detay')->findAll();


//Uyeler tablonuzdaki 123 kaydınıza ait "detay" ilişkisi ile birlikte bilgiler getirilir

$birUye = Uyeler::model()->with('detay')->findByPk(123);



sorgunuzun sonucunu aktardığınız ve render ettiğiniz view dosyanızda




//$uyeList değişkeninize ait bilgileri şu şekilde yazdırabilirsiniz

foreach($uyeList as $uye){

  echo $uye->detay->uye_turu;

}


//$birUye değişkeninize ait bilgileri şu şekilde yazdırabilirsiniz

echo $birUye->detay->uye_turu;



Daha önce frameworkle çalışmadıysanız ve yanlış anlamazsanız dost tavsiyesi olarak, küçük veya orta çaplı projelerde kullanabileceğiniz Codeigniter veya Laravel gibi Türkçe kaynağı bol olan frameworklerle başlayabilirsiniz. Böylelikle frameworkle birlikte OOP veya MVC mantığınıda daha kolay öğrenebilirsiniz. Kendinizi bunlarda geliştirdikten sonra bu frameworke geçmeniz sizi fazla zorlamayacaktır.

Bu yüzden Yii Framework ü sonraki adımlarda kullanırsanız daha doğru olabilir.

iyi çalışmalar.

yahya bey ilgilerinize teşekkür ediyorum. çok güzel oldu çalıştı.

tavsiyelerinizi değerlendirmeye çalıştım fakat laravel veya codeigniter yii gibi heyecan vermedi açıkçası,

bununla ilgili müsadeniz olursa bir sorum daha olacak.

burada $uyeList = Uyeler::model()->with(‘detay’)->findAll();

yerine, bu ilişki mantığını kurarak açık sorgulamayı nasıl yaptırabilirim?

yani

$uyeList = Yii::app()->db->createCommand()

	     ->select('uyeler.uye_adi,detaylar.uyeler_id')

şeklinde bir mantık kurabilirmiyim?

bu noktadan sonra baya bir ilerleme kaydedeceğimi düşünüyorum, araştırmaya devam :)

tekrar tekrar çok teşekkürler, iyi çalışmalar.

Merhaba @psatha,

Faydalı olabilidiğime sevindim. Yoğunluktan dolayı bu aralar foruma zaman ayıramıyorum,


$uyeList = Uyeler::model()->with('detay')->findAll();

kodu yerine




$durum = 'Active';

$uyeList = Yii::app()->db->createCommand()

    ->select(array('uyeler.uye_adi,detaylar.uyeler_id'))

    ->from('uyeler as u')

    ->join('detaylar as d', 'd.uyeler_id=u.id')

    ->where('durum=:durum', array(':durum'=>$durum))

    ->queryRow();



şeklindeki kodları da çalıştırabilirsiniz,

Detaylı bilgi için : http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder

Fakat tek satırda basit bir şekilde çözülebilen işlemler için bu kadar çok satır ve uzun kodları kullanmanızı önermem,

Satır sayısı arttıkça hata yapma olasılığı artar, kodların revize edilme süresi uzar ve daha fazla dikkat ederek kontrollü bir şekilde işlemlerinizi yapmanız gerekir.

Laravel ve Codeigniter i amaç olarak değil araç olarak kullanabilirsiniz. :)

İyi çalışmalar.