“index”アクションにてPHP Warningのエラーが発生した時の原因と解決のメモ
エラーの内容
PHP warning Invalid argument supplied for foreach()
下記のコードでエラーが発生している模様
場所:httpdocs/protected/views/user/_view.php
// ここでエラーが発生 <b><?php echo CHtml::encode($data->userDetail->getAttributeLabel('photo_main')); ?>:</b>
場所:/yii/framework/db/ar/CActiveFinder.php(826)
{ // determine the primary key value if(is_string($this->_pkAlias)) // single key { if(isset($row[$this->_pkAlias])) $pk=$row[$this->_pkAlias]; else // no matching related objects return null; } else // is_array, composite key { $pk=array(); foreach($this->_pkAlias as $name=>$alias) { if(isset($row[$alias])) $pk[$name]=$row[$alias]; else // no matching related objects return null; } $pk=serialize($pk); } // retrieve or populate the record according to the primary key value if(isset($this->records[$pk])) $record=$this->records[$pk];
定義漏れかと思い『relations()』でuserDetailを定義していたかを確認したが特に問題はなかった しかしviewでオブジェクトの中身を出力すると空っぽだっで属性どころかオブジェクト自体が取得出来ていない 別の機能とソースを見比べても全くわからずデータベースの定義を確認した所、原因が判明した
■原因
PRIMARYが存在しなかったためデータが取得出来なかった模様
■解決法
PRIMARYを追加する