просмотров / search.php
<?php foreach($dataProvider->getModels() as $call){ ?>
<tbody>
<tr>
<td><?=$call->created?></td>
<td><?=$call->call_datetime?></td>
<td><?=$call->call_from?></td>
<td><?=$call->call_to?></td>
<td><?=$call->duration?></td>
<td><?=$call->call_type?></td>
<td><?=$call->extension?></td>
<td><?=$call->callRecFiles->fname?></td>
</tr>
</tbody>
<?php } ?>
отношение в моделях / Call.php
public function getCallRecFiles()
{
return $this->hasOne(CallRecording::className(), ['callref' => 'callref']);
}
Контроллер действийПоиск
public function actionSearch($id)
{
$cust = new Customer();
Yii::$app->user->identity->getId();
$dataProvider = new ActiveDataProvider([
'query' => Call::find()
->with('customer', 'callRecFiles') // eager loading relations 'customer' & 'callRecFiles'
->where(['custref' => $id])
->limit(10),
'pagination' => false, // defaults to true | when true '->limit()' is automatically handled
]);
return $this->render('search',[
'dataProvider' => $dataProvider,
'cust' => $cust,
]);
}
Что я здесь делаю неправильно или отсутствует? Я просмотрел другие подобные вопросы, однако, похоже, все они связаны с виджетами или вводом файлов. Любая помощь приветствуется.
Есть два места, где вы можете иметь ошибку Trying to get property of non-object
,
Первый здесь:
<td><?=$call->callRecFiles->fname?></td>
Чтобы избежать этого, вы должны использовать if
заявление:
<td><?= $call->callRecFiles ? $call->callRecFiles->fname : null ?></td>
Второе здесь:
Yii::$app->user->identity->getId();
Если в вашем контроллере нет правила контроля доступа, незарегистрированный пользователь может получить доступ к этому действию и методу поиска, поэтому у вас нет identity
пользователя, пока он не войдет в систему. Чтобы избежать этого, вы должны добавить behaviors
на ваш контроллер:
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::class,
'rules' => [
[
'allow' => true,
'roles' => ['@'],
],
],
],
];
}
Пользователю потребуется войти в систему, прежде чем получить доступ к вашим действиям в этом контроллере.
Кстати, вы вообще не используете этот код:
Yii::$app->user->identity->getId();
Так что удаление это тоже решение.
Других решений пока нет …