Вечер добрый!
новичек в yii и ооп вцелом, разбираю по косточкам тестовый блог
имеется таблица tbl_post(с описательными характеристиками постов, айди, автор, время, текст и код категории) + к ней подвязываю tbl_category (не из примера, создал сам, самую простую с полями id и name идентификатор категории (уникальный праймари кей инкрементный) и имя категории (уникальный ключик), поначалу мучался со связываниями, но врезультате вымучил следующие связи(с помощью Gii):
Post
return array(
'category' => array(self::HAS_ONE, 'Category', 'id'),
'comments' => array(self::HAS_MANY, 'Comment', 'post_id'),
'author' => array(self::BELONGS_TO, 'User', 'author_id'),
);
Category
public function relations()
{
return array(
'id0' => array(self::BELONGS_TO, 'Post', 'id'),
);
}
Что я хочу от вида:
в post view хочу вывести данные по посту + по категории к которой он относится, так как связи настроены, то
public function actionIndex()
{
$dataProvider=new CActiveDataProvider('Post');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
если я всё праввильно понимаю - нужную мне инфу содержит в себе dataProvider
результат:
ID: 1
Title: Welcome!
Content: This blog system is developed using Yii. It is meant to demonstrate how to use Yii to build a complete real-world application. Complete source code may be found in the Yii releases. Feel free to try this system by writing new posts and posting comments.
Tags: yii, blog
Status: 2
Create Time: 1230952187
Update Time: 1230952187
Category: Новая категория - есть вывод категории, которая мне нужна
А теперь загадка, в тестовом примере у меня в наличии два уже готовых поста, с ними проблем нет, проблема начинается, когда я добавляю третий пост
public function actionCreate()
{
$model=new Post;
if(isset($_POST['Post']))
{
$model->attributes=$_POST['Post'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$Criteria= new CDbCriteria;
$Criteria->select='name';
$Criteria->order='name';
$Cats = Category::model()->findAll($Criteria);
$this->render('create',array(
'model'=>$model,
'categories'=>$Cats,
));
}
‘categories’=>$Cats, = создаю для того, чтобы в вьюхе криэйта отобразить селект к какой именно категории я хочу чтобы вязался новый пост
тут многое еще не допилено, например оно не ставит время создания поста + я передаю категорию текстом, а в базу должен писать ключ категории - это пол беды, для теста я это всё вбил руками прямо в базу и собственно проблема:
как только появляется третий пост, вид даёт ошибку - Trying to get property of non-object
и строка с ошибкой = <?php echo CHtml::encode($data->category->name); ?>
вопрос: почему, когда постов 2 - ошибки нет, добавляю новый - даёт ошибку, пробовал третий пост делать точной копией второго или первого (единственная разница ключ ессно) - всеравно ошибка
помогите плз, не могу понять где я чего не дочитал, где я чего неправильно понял или к чему я морально не созрел, но я понял, что когда я в рендер передал dataProvider то я передал данные модели Post + данные подвязанные к ней из модели Category и вот уже окончательно запутался почему в одном случае выводится инфа бесприкословно, а в другом - не выводится