رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
شی مدل (حل شد)
#1
Question 
سلام

آیا وقتی ما یک شی از مدل میسازیم ، این شی تمامی اطلاعات موجود درون آن جدول را درون خود ذخیره کرده است؟
پاسخ
تشکر شده توسط:
#2
خیر، هر شئ از هر مدل، توی معماری ActiveRecord فقط و فقط نماینده یک رکورد از جدول مربوطه است.
پاسخ
تشکر شده توسط:
#3
خب در جلسه 9 actionView فایل issueController رو ببینید
	public function actionView($id)
	{
		$issue=$this->loadModel($id , false);
		$comment=$this->createComment($issue);
		$this->render('view',array(
			'model'=>$issue,
			'comments' => $comment,
		));
	}
اینم از CreateComment
	protected function createComment($issue){
		$comment= new Comment;
		if(isset($_POST['Comment'])){
			$comment->attributes=$_POST['Comment'];
			if ($issue->addComment($comment)){
				Yii::app()->user->setFlash('commentSubmitted' , 'your comment has been send');
				$this->refresh();
			}
		}
		return $comment;
	}
و اینم View که داره کل کامنت ها رو نشون میده
<?php foreach($comments as $comment): ?>
<div class="comment">
      <div class="author">
		<?php echo $comment->author->username; ?>:
	</div>

	<div class="time">
		on <?php echo date('F j, Y at h:i a',strtotime($comment->create_time)); ?>
	</div>

	<div class="content">
		<?php echo nl2br(CHtml::encode($comment->content)); ?>
	</div>
     <hr>
</div><!-- comment -->
<?php endforeach; ?>
پاسخ
تشکر شده توسط:
#4
خوب این بخاطر اینه که توی کنترلر اومدیم تمام کامنتهای یک پست رو خوندیم و توی آرایه comments$ ریختیم. درواقع هر خونه از این آرایه یک شئ از کلاس ActiveRecord هست که معادل یک رکورد در جدول Comments محسوب میشه.
پاسخ
تشکر شده توسط:
#5
میشه بگید دقیقا کجا ؟

اینم از loadMoadel مون
	public function loadModel($id , $withComments=FALSE)
	{
		if ($withComments){
			$model=Issue::model()->with(array('comments'=>array('with'=>'author')))->findByPk($id);
		}else{
			$model=Issue::model()->findByPk($id);
		}
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}
پاسخ
تشکر شده توسط:
#6
کدی که شما برای ویو گذاشتین، comments.php_ هست درحالی که ما توی کنترلر ویوی view.php رو رندر کردیم. توی view.php خطوط 46 به بعد این کدها وجود داره:
<div id="comments">
    <?php if($model->commentCount >= 1): ?>
    <h3>
        <?php echo $model->commentCount > 1 ? $model->commentCount . ' comments' : 'One comment'; ?>
    </h3>

    <?php $this->renderPartial('_comments', array('comments' => $model->comments)); ?>

    <?php endif; ?>

    <h3>Leave a Comment</h3>

    <?php if(Yii::app()->user->hasFlash('commentSubmitted')): ?>

    <div class="flash-success">
        <?php echo Yii::app()->user->getFlash('commentSubmitted'); ?>
    </div>

    <?php else: ?>

    <?php $this->renderPartial('/comment/_form', array('model' => $comment)); ?>

    <?php endif; ?>
</div>
که اگه دقت کنید، به خوبی متوجه میشین که کجا، comments$ ساخته میشه و برای comments.php_ ارسال میشه.
پاسخ
تشکر شده توسط:
#7
منظورتون این خطه
 <?php $this->renderPartial('_comments', array('comments' => $model->comments)); ?>

باز اگه دقیقتر نگاه کنیم این کامنتا به وسیله متد createComment در actionView ساخته شده و درون createComment هم یک شی از مدل کامنت ساخته شده

هنوز واسم مبهمه کجا کل کامنتامون داره ساخته میشه؟
پاسخ
تشکر شده توسط:
#8
شما هربار که یک کامنت جدید ثبت میکنید، createComment صدا زده میشه ولی model->comments$ داره با کمک Relation تعریف شده توی مدل Issue کامنتهاش رو از دیتابیس میخونه و هیچ ارتباطی به createComment نداره.
پاسخ
تشکر شده توسط: Alireza




کاربران در حال بازدید این موضوع: 3 مهمان