Essayer d'obtenir la propriété de non-objet dans yii2
Je veux avoir accès à hasMany rapport mais j'obtiens l'erreur avec ce contenu
Notice PHP – yii\base\ErrorException
Essayer d'obtenir la propriété de non-objet
c'est mon point de vue : news/index.php
<?php foreach($models as $model): ?>
<!-- Project One -->
<div class="row">
<div class="col-md-2">
<a href="#">
<img class="img-responsive" src="photos/<?=$model->photos->id?>.jpg" alt="">
</a>
</div>
<div class="col-md-10">
<h4>
<div class="row">
<div class="col-sm-8">
دسته بندی:<?= $model->cat->name; ?>
</div>
<div class="col-sm-4">
تاریخ:
</div>
</div>
</h4>
<h3><?=$model->title ?></h3>
<p><?=$model->body ?></p>
<a class="btn btn-primary" href="#">View Project <span class="glyphicon glyphicon-chevron-right"></span></a>
</div>
</div>
<hr>
<!-- /.row -->
<?php endforeach; ?>
et c'est mon frontend\modèles\Nouvelles relations
public function getCat()
{
return $this->hasOne(Categories::className(), ['id' => 'cat_id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getPhotos()
{
return $this->hasMany(Photos::className(), ['news_id' => 'id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getViews()
{
return $this->hasMany(Views::className(), ['news_id' => 'id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getVotes()
{
return $this->hasMany(Votes::className(), ['news_id' => 'id']);
}
et c'est NewsController
<?php
namespace frontend\controllers;
use frontend\models\News;
class NewsController extends \yii\web\Controller
{
public function actionIndex()
{
$models =News::find()->all();
return $this->render('index',compact('models'));
}
}
et c'est vardump($model->photos)
array(1) {
[0]=>
object(frontend\models\Photos)#84 (8) {
["_attributes":"yii\db\BaseActiveRecord":private]=>
array(2) {
["id"]=>
int(2)
["news_id"]=>
int(2)
}
["_oldAttributes":"yii\db\BaseActiveRecord":private]=>
array(2) {
["id"]=>
int(2)
["news_id"]=>
int(2)
}
["_related":"yii\db\BaseActiveRecord":private]=>
array(0) {
}
["_errors":"yii\base\Model":private]=>
NULL
["_validators":"yii\base\Model":private]=>
NULL
["_scenario":"yii\base\Model":private]=>
string(7) "default"
["_events":"yii\base\Component":private]=>
array(0) {
}
["_behaviors":"yii\base\Component":private]=>
array(0) {
}
}
}
je peux accéder à $model->cat->name
mais je ne peux pas accéder à $model->photos->id
pourquoi?!
hasMany
fournit un tableau, de sorte que vous avez à faire une boucle par elle.j'ai essayer avec $model->photos[0]->id, mais n'ont toujours une erreur avec le contenu "Undefined offset: 0"
vous avez unique
photo->id
ou de Plusieurs?c'est dans la boucle foreach
juste une boucle par elle en utilisant foreach et vous obtiendrez tous les id.
OriginalL'auteur majid | 2015-10-27
Vous devez vous connecter pour publier un commentaire.
Le problème que vous rencontrez est que
$model->photos
est un tableau. C'est parce que vous définissez la relation avechasMany()
ce qui implique que chaqueNews
peut avoir de multiplesPhotos
.Vous pouvez effectuer les opérations suivantes dans votre point de vue:
Cela permet d'afficher la première photo (à condition qu'il en est un, si il y a un changement qui n'en sont pas, alors vous devrait vérifier que le
0
est réglé).Ou vous pouvez afficher toutes les photos avec:
(ou de tout autre conception que vous voulez)
OriginalL'auteur D.Mill
Vous pouvez accéder parce qu'il a un hasMany relation et
$model->photos
est un ActiveQuery, si vous êtes à être en mesure d'obtenir avec$model->photos->one()->id
pour la première ou faire une boucle avec$model->photos->all()
Plus d'infos: http://www.yiiframework.com/doc-2.0/yii-db-activequery.html
Post le var_dump de $model->photos
je l'ajoute sur la question
Essayez avec $model->photos['id']
OriginalL'auteur stig-js
Vous pouvez toujours vérifier d'abord chercher plus tard cette façon, vous pourrez ajouter un retard mineur
mais vous permettra de réduire le message et vérifiez la sortie
c'est à dire
OriginalL'auteur gvasilopulos