Связ relations

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Связ relations

Сообщение Arnowt »

Есть 2е модели А В
A->bid + множество других полей
B->id, name + множество других полей

B->id={1...} //ID первичный, автоинкримент.
A->bid //изначально равен 0

в контролере A пишу:

Код: Выделить всё

public function relations(){
        return array(
            'bRel'=>array(self::BELONGS_TO,'B','bid'),
        );
    }
Если записей A->bid=0 не существует, то все работает.
Но если есть, то вылетает ошибка «Trying to get property of non-object» (у же при работе с виджестом).

понимаю что можно в "B" вписать этот нулевой id или сделать A->bid=1 по умолчанию. (Но таблица "B" может иногда «TRUNCATE»)
Вроде как по документации должен вернуть NULL и он скорее всего и возвращает этот самый null.
И тогда вопрос как сделать чтобы виджест не ругался?

Код: Выделить всё

<?php $this->widget('zii.widgets.grid.CGridView',
    array(
        'dataProvider'=>$dataProvider,
        'columns'=>array(
...
            array('name'=>'bRel',
                  'value'=>'$data->bRel->name',
                  'htmlOptions'=>array('style'=>'text-align:right;')),
...
        )
    )
);?>
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: Связ relations

Сообщение Arnowt »

пробовал так но что-то эффекта не возымело
'value'=>'($data->buyerRel->name!=null ? $data->buyerRel->name : "")',

Такой: 'value'=>'function(){return "";}',
выдает шибку «htmlspecialchars() expects parameter 1 to be string, object given»
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: Связ relations

Сообщение Arnowt »

В общем сделал так

Код: Выделить всё

'value'=>function($data){
if(isset($data->buyerRel->name)){return $data->buyerRel->name;}
else{return '';}
}, 
сработало только через isset, похоже переменная не то что NULL, она вообще не устанавливается.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Связ relations

Сообщение Nafania »

Arnowt писал(а):В общем сделал так

Код: Выделить всё

'value'=>function($data){
if(isset($data->buyerRel->name)){return $data->buyerRel->name;}
else{return '';}
},
сработало только через isset, похоже переменная не то что NULL, она вообще не устанавливается.

Код: Выделить всё

if($data->buyerRel){return $data->buyerRel->name;} 
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: Связ relations

Сообщение Arnowt »

о как... там нулл
спс )
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: Связ relations

Сообщение Arnowt »

Снова я аплодисментов не нужно :)
Похожая проблема:

Код: Выделить всё

class Uri extends CActiveRecord{
public function relations(){return array('site'=>array(self::BELONGS_TO,'Sites','sid'));}

Код: Выделить всё

public function actionUpdate($id){
...
$uri=new Uri('search');
$uri->unsetAttributes();
$uri->sid=$id; //скорее всего так не правильно делать, тогда как правильно? :) нужен изначальный фильтр по сайту
if(isset($_GET['Uri']))    $uri->attributes=$_GET['Uri'];
$this->render('update',array('model'=>$model,'subjList'=>$subjList,'uri'=>$uri));

Код: Выделить всё

<?php $this->widget('zii.widgets.grid.CGridView',array(
    'dataProvider'=>$uri->search(),
    'filter'      =>$uri,
    'columns'     =>array(
        array('name'       =>'site',
              'value'      =>'$data->site->domen',
              'htmlOptions'=>array('style'=>'text-align:right;')),
        'uri',
        'parsed',
        'dt'
    ),
)); ?>
htmlspecialchars() expects parameter 1 to be string, object given
не хочет выводить связь
Ответить