Kezdő Kérdés

Sziasztok!

Most ismerkedek a Yii frameworkel. Próáltam pár tutorialt végigvinni (blog, pár youtube video), de mindig elakadok, mert olyan hibát kapok ami nincs részletezve a tutorialban, így sosem jutok a végére.

Legutóbb ezt próbáltam: [www].youtube[.]com/watch?v=58LjNDXY-PE de 'Trying to get property of non-object ’ hibát kapok.

Egyenlőre cak annyit szeretnék, hogy egy albumlistát megjelenítsek.

Van 3 táblám:

tbl_categories: id, categoria

tbl_Authors: id, name

tbl_Albums: id, albumName, authorname, categoria

Mindhárom táblában az id a PK. tbl_Albums.authorName=tbl_Authors.id, tbl_Albums.categoirra=tbl.Categories.id

Biztos nem lehet nehéz, csak nem jövök rá hogy hol akadok el.

Megköszöném, ha tudna valaki segíteni.

Üdv a fórumon!

A hibaüzenetben nincs semmi Yii-specifikus, sima PHP hiba. Yii::trace() vagy var_dump() segítségével meg tudod nézni, hogy mit tartalmaz a vátozód (vagy milyen eredményt ad vissza a kifejezésed) aminek az objektumpéldányt kellene.

Ha bemásolod a hibás kódrészletet és a stack trace-t, akkor valószínűleg többet is tudok segíteni.

Amig te nem jöttél rá, hogy hol akadtál el, addig segíteni is nagyon nehéz :) Kicsit több infó kellene arról, hogy hogyan próbáltad eddig, és meddig jutottál.

Csináltam magamnak egy példát, és annyit szeretnék, hogy ahol kell megjelenjenek a zenekar nevei, ill. a stílusok neve, ne az id-k jelenjenek meg.

az aulbums modelben csináltam egy relációt:




'authors'=>array(self::BELONGS_TO, 'Authors', 'id'),



A youtube példában a szerző hasonló módon jelenítette meg az adatokat:




_view.php:


<?php echo CHtml::encode($data->authors->name); ?>



Az eredményemet az index.html fájlban látjátok.

Mellékeltem a táblákat is.

Senki? :mellow:

Ez így biztosan nem lesz jó. A reláció-definícióban mindig az idegen kulcsot tartalmazó oszlop nevét kell megadni. Az "id" nyilvánvalóan nem az, viszont a "tbl_albums" tábládban nem is látok ilyen idegen kulcsot, úgyhogy azt előbb hozzá kellene adni. Ezek után valahogy így fog kinézni a reláció:




'author' => array(self::BELONGS_TO, 'Authors', 'authorId'),



Bent van, csak véletlenül kitöröltem azt a sort. :S

Köszi, Átnézem mégegyszer.

Sziasztok!

Tanácsotokat, segítségeteket szeretném kérni egy pizzarendelő alkalmazásnak az adatmodelljéhez.

Hosszabb tervezést követően a csatolt fájl alapján elkészítettem egy adatbázist ami működhetne már( 4.5.009-es verzió körülbellül).

Viszont a kapcsolatok kódba égetése közben ismét elbizonytalanodtam, megkérdőjeleztem az adatbázis helyességét.

A problémám az lenne, hogy hogyan tudok összekapcsolni egy modellen belül 4db táblát? Konkrétan kiszeretném íratni az adott felhasználó rendeléseit a termék nevével és kiszerelésével együtt. Yii-s kapcsolatok típusait átnéztem, de egyelőre nem tudom megoldani a problémát.

Másik dilemma a kosár kezelés: adatbázis táblával vagy anélkül? Vagy mind2-vel?

Yii melyiket preferálja? Átnéztem a Yii-Shop bővítményt, de kosár adattáblát nem találtam a kigenerált adatbázisban.

Nagyon köszönöm előre is a segítséget!

4736

adatb_terv.png

üdv baromi kezdő vagyok és egy alap dologra nem tudok rájönni.

adott egy menüpont, pl Bemutatkozás . erre kattintva a bemutatkozas.php töltődik be. ebbe az oldalba adatbázis tartalmat hogyan tudok betöltetni? nyilván egy egyszerű lekérdezésről és kiíratásról van szó de sehogy sem tudom összerakni.

Hali!

Nagyjából lépésről-lépésre:

  • ha rendesen hoztál létre webalkalmazást (értsd: konzolban "yiic webapp név") akkor a configban (protected/config/main.php) állítsd be az adatbázis kapcsolatodat - mysql esetén elég a



/*

'db'=>array(

	'connectionString' => 'mysql:host=localhost;dbname=testdrive',

	'emulatePrepare' => true,

	'username' => 'root',

	'password' => '',

	'charset' => 'utf8',

),

*/



részből kivenni a kommentet és átírni a dbname-t, username-t és password-öt - felette lévő sqlite-os adatbázis kapcsolatot kommenteld, vagy töröld ki - lényeg, hogy csak egy ‘db’ legyen a components array-ben.

  • hogy ne kelljen mindent kézzel csinálni a yii tartalmaz egy generátort is - ez a gii - ezt a fenti main.php-ben kell engedélyezni: modules részben a ‘gii’ körül vedd ki a kommentet és írj be valami jelszót

  • mentés után a böngészőben hozd be a gii-t: www.domained.hu/webappod/index.php?r=gii - majd írd be a jelszót

  • Controller generatorban add meg a controller id-jét: "bemutatkozas" majd Preview és generate - "try it now"-ra kattintva rögtön meg is tudod nézni, vagy a www.domained.hu/webappod/index.php?r=bemutatkozas -ra mész. A controllert itt találod: protected/controllers/BemutatkozasController.php a létrehozott view-t pedig a protected/views/bemutatkozas/index.php-ben.

A controllerben szokás az adatot lekérni a modellen keresztül majd átadni a view-nak a render() hívásában.

Yii-ben többféleképpen tudsz az adatbázisból adatot lekérni: Active Record, DAO vagy Query Builder - ezekről bővebben a guide-ban tudsz olvasni (guide:database) - nem látok bele az adatbázisodba, így majd kiválasztod a neked legjobban megfelelőt. Active Record esetén a gii-vel ki lehet generálni a modelt - Model generatorra kell kattintani és meg kell adni a táblanevet.

  • szóval az BemutatkozasController-ben az actionIndex()-ben lekéred az adatot majd átadod:



class BemutatkozasController extends Controller

{

	public function actionIndex()

	{

		// pár példa:


		// Active Record

		// $model = Page::model()->findByPk(1);

		// $szoveg = $model->szoveg;

		

		// vagy

		// DAO

		// $szoveg = Yii::app()->db->createCommand("SELECT szoveg FROM tábla WHERE id = :id")->queryScalar(array(":id" => 1));

		

		// vagy

		// Query Builder

		// $szoveg = Yii::app()->db->createCommand()->select("szoveg")->from("tábla")->where("id = :id", array(':id' => 1))->queryScalar();


		// ezt kommenteld majd ki

		$szoveg = "Ez a szöveg jön majd adatbázisból";


		$this->render('index', array(

			'szoveg' => $szoveg

		));

	}

}



és a view-ban (protected/views/bemutatkozas/index.php) kiíratod:




<?php echo $szoveg ?>



  • majd berakod a menübe (alapból a protected/views/layouts/main.php-ben van):



array('label'=>'Bemutatkozás', 'url'=>array('/bemutatkozas/index')),



Tipp: érdemes elmerülni a guideban, tutorialokban és könyvekben, megnézni a 4 részes videósorozatot - illetve jobban megnézni, hogy mi a MVC.

(ui: a fenti createCommand-os lekéréseket jobb lenne egy külön (model) osztályba rakni - nem akartam ezzel bonyolítani a példát)

köszi

és a $szoveg = "Ez a szöveg jön majd adatbázisból"; helyére kell választanom a három lekérdezés közül? valahogy még mindig nem állt össze. folyamatos hibákat kapok.

jóó bamba voltam, Megoldottam! :) köszöntem szépen