Yii Framework Forum: foreach danych z kilku modeli - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

foreach danych z kilku modeli Rate Topic: -----

#1 User is offline   mariusz8801 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 06-April 14

Posted 23 January 2015 - 12:45 AM

Witam
Mam problem z wyświetleniem danych z kilku modeli relacje wyglądają tak:
Model1:
public function relations()
    {
        return array(
            'modelData2' => array(self::HAS_MANY, 'Model2', 'id'),
            'modelData3' => array(self::HAS_ONE, 'Model3', 'id')
        );
    }


Dalej pobieram dane wszystko jest ok, zgadza się liczba wierszy pobranych:
$criteria = new CDbCriteria();
$criteria->with = array(
     'modelData2',
     'modelData3'
);
$model = Model1::model()->findAll($criteria);


problem jest jak już chcę wyświetlać dane:
foreach ($model as $mod) {
   echo $mod->name;
   echo $mod->modelData2->name;
   echo $mod->modelData3->name;
}


Wyskakuje mi błąd trying to get property of non object

Z góry dziękuję za pomoc
0

#2 User is offline   Bizley 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 574
  • Joined: 29-July 14
  • Location:Wrocław

Posted 23 January 2015 - 02:32 AM

Wygląda mi na to, że nieprawidłowo zdefiniowany jest jeden lub dwa klucze obce w relacji. Przez to $mod->modelData2 lub $mod->modelData3 nie zwraca obiektu.
0

#3 User is offline   rob006 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 01-January 13
  • Location:Lublin, Poland

Posted 23 January 2015 - 05:11 AM

Na pewno masz literówkę, powinno być "self::HAS_ONE" zamiast "self::HAS ONE". Zresztą całość wygląda dość podejrzanie, np pewno robiłeś to wg dokumentacji?
0

#4 User is offline   mariusz8801 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 06-April 14

Posted 23 January 2015 - 09:54 AM

już poprawiłem tu tą literówkę ale w kodzie głównym miałem dobrze
0

#5 User is offline   rob006 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 01-January 13
  • Location:Lublin, Poland

Posted 23 January 2015 - 09:59 AM

Spróbuj dla testu zakomentować pojedyncze odwołania i sprawdzić czy problem jest tylko z jedną relacją, czy z obiema.

Przy relacjach typu HAS_MANY i HAS_ONE w trzecim parametrze podajesz nazwę kolumny, która przechowuje informacje o kluczu obcym w modelu, do którego chcesz utworzyć relację (czyli Model2 i Model2). zwykle nie jest to 'id' tylko coś w stylu 'model1_id'.
0

#6 User is offline   mariusz8801 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 06-April 14

Posted 23 January 2015 - 10:48 AM

komentowałem już wcześniej i mam jeszcze belongs to ale to z kolei działa ok a HAS_ONE i HAS_MANY już nie.
Z kolei jeśli chodzi o trzeci parametr w relacjach has one i has many to w jednym mam model1_id natomiast w drugim id bo jest jako klucz główny jednej tabeli i jednocześnie kluczem obcym do drugiej
0

#7 User is offline   rob006 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 01-January 13
  • Location:Lublin, Poland

Posted 23 January 2015 - 12:04 PM

Relacja HAS_MANY zwraca nie obiekt a tablicę obiektów, powinieneś więc odwoływać do nich po indeksie, np
$mod->modelData2[0]->name

albo najlepiej przeglądać foreachem.

Co do HAS_ONE to prawdopodobnie masz jakieś niespójności w bazie i dla któregoś obiektu typu Model1 nie ma pasującego obiektu typu Model3. Przed wyświetleniem nazwy obiektu sprawdzaj czy on w ogóle istnieje i zobacz czy któregoś nie brakuje.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users