db relations problem

Hello Yii devs.

This is my db:





/*

Navicat MySQL Data Transfer


Source Server         : localhost

Source Server Version : 50508

Source Host           : localhost:3306

Source Database       : plate


Target Server Type    : MYSQL

Target Server Version : 50508

File Encoding         : 65001


Date: 2012-02-04 00:38:31

*/


SET FOREIGN_KEY_CHECKS=0;


-- ----------------------------

-- Table structure for `hrana`

-- ----------------------------

DROP TABLE IF EXISTS `hrana`;

CREATE TABLE `hrana` (

  `IDhrana` int(11) NOT NULL AUTO_INCREMENT,

  `hrana` varchar(45) DEFAULT NULL,

  `cijena` decimal(10,0) DEFAULT NULL,

  `IDrestoran` int(11) NOT NULL,

  PRIMARY KEY (`IDhrana`),

  KEY `fk_hrana_restoran1` (`IDrestoran`),

  CONSTRAINT `fk_hrana_restoran1` FOREIGN KEY (`IDrestoran`) REFERENCES `restoran` (`IDrestoran`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;


-- ----------------------------

-- Records of hrana

-- ----------------------------

INSERT INTO `hrana` VALUES ('1', 'Pizza Cappricosa', '3', '3');

INSERT INTO `hrana` VALUES ('2', 'Riblja plata', '30', '3');

INSERT INTO `hrana` VALUES ('3', 'Carry sendvic', '2', '1');

INSERT INTO `hrana` VALUES ('4', 'Kobasice', '4', '2');

INSERT INTO `hrana` VALUES ('5', 'Pileći file', '5', '2');

INSERT INTO `hrana` VALUES ('6', 'Pizza Bosna', '3', '1');


-- ----------------------------

-- Table structure for `hrana2kategorija`

-- ----------------------------

DROP TABLE IF EXISTS `hrana2kategorija`;

CREATE TABLE `hrana2kategorija` (

  `IDhrana2kategorija` int(11) NOT NULL AUTO_INCREMENT,

  `IDkategorija` int(11) NOT NULL,

  `IDhrana` int(11) NOT NULL,

  PRIMARY KEY (`IDhrana2kategorija`),

  KEY `fk_hrana2kategorija_kategorija` (`IDkategorija`),

  KEY `fk_hrana2kategorija_hrana1` (`IDhrana`),

  CONSTRAINT `fk_hrana2kategorija_hrana1` FOREIGN KEY (`IDhrana`) REFERENCES `hrana` (`IDhrana`) ON DELETE NO ACTION ON UPDATE NO ACTION,

  CONSTRAINT `fk_hrana2kategorija_kategorija` FOREIGN KEY (`IDkategorija`) REFERENCES `kategorija` (`IDkategorija`) ON DELETE NO ACTION ON UPDATE NO ACTION

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;


-- ----------------------------

-- Records of hrana2kategorija

-- ----------------------------

INSERT INTO `hrana2kategorija` VALUES ('1', '3', '1');

INSERT INTO `hrana2kategorija` VALUES ('2', '4', '2');

INSERT INTO `hrana2kategorija` VALUES ('3', '1', '3');

INSERT INTO `hrana2kategorija` VALUES ('4', '4', '4');

INSERT INTO `hrana2kategorija` VALUES ('5', '4', '5');

INSERT INTO `hrana2kategorija` VALUES ('6', '3', '6');


-- ----------------------------

-- Table structure for `kategorija`

-- ----------------------------

DROP TABLE IF EXISTS `kategorija`;

CREATE TABLE `kategorija` (

  `IDkategorija` int(11) NOT NULL AUTO_INCREMENT,

  `kategorija` varchar(45) DEFAULT NULL,

  PRIMARY KEY (`IDkategorija`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;


-- ----------------------------

-- Records of kategorija

-- ----------------------------

INSERT INTO `kategorija` VALUES ('1', 'Predjelo');

INSERT INTO `kategorija` VALUES ('2', 'Večera');

INSERT INTO `kategorija` VALUES ('3', 'Pizza');

INSERT INTO `kategorija` VALUES ('4', 'Roštilj');



Hrana model relation:




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(

			'restoran' => array(self::BELONGS_TO, 'Restoran', 'IDrestoran'),

			'kat' => array(self::HAS_MANY, 'Hrana2kategorija', 'IDhrana'),

		

	   );		



I wonder why this code doesn’t work:




$hrana = Hrana::model()->with('kat')->findAll();

		foreach ($hrana as $kat)

			echo $kat->kat->IDkategorija;



And this does:




	$hrana = Hrana::model()->with('restoran')->findAll();

		foreach($hrana as $kat)

			echo $kat->restoran->restoran.'</br>';



Tnx.

Also, this doesn’t work:




		$hrana = Hrana::model()->with('test')->findAll();

		foreach ($hrana as $kat)

			echo $kat->test->IDkategorija;


	'test'=>array(self::MANY_MANY, 'Kategorija',

                'hrana2kategorija(IDhrana, IDkategorija)'),

PHP notice

Trying to get property of non-object

This should work





$hrana = Hrana::model()->with('kat')->findAll();

foreach ($hrana as $h)

  foreach($h->kat as $k)

    echo $k->IDkategorija;



Also read about relational query with through.

/Tommy

Thank you very much. It works!! B)