ورود

View Full Version : چطور از parent id به نام آن برسم؟ (حل شد)



shadecute
دوشنبه 20 بهمن 1393, 17:05 عصر
سلام
من برای پاسخ به کامنت ها در جدول parent_id ایجاد کردم. حالا نظر ارسال میشه و بقیه چیزا همه درست کار میکنه
می خوام در ویو نشون بدم که مدیر در پاسخ به نام ارسال کننده پاسخ را ارسال کرده است
نام همه ارسال کننده ها در author ذخیره میشه
parent هم در parent_ id
حالا نام ارسال کننده رو اینجوری نشون میدم

echo $comment->author;

و شماره parent رو هم اینجوری

$comment->parent_id
که شماره parent_id هم بدرستی نمایش داده میشه
حالا چظوری به جای اون parent_id نام طرف رو نشون بدم؟ از parent_id به author برسیم و نام کاربر رو نشونش بدیم؟

googoli
دوشنبه 20 بهمن 1393, 22:13 عصر
سلام
این طوری که من متوجه شدم شما هیچ وقت نمی تونی از parent_id به کاربر برسی
اول باید یک فیلد درست کنی که کد کاربرکه این کامنت رو زده در خودش ذخیره کنه
و این فیلد رو به جدول کاربرانت ارتباط بدی
بعد نحوه دسترسی اینطوری میشه


$model->User->name

jionelmessi
دوشنبه 20 بهمن 1393, 22:16 عصر
با سلام اگر در سیستم شما در جدول نظرات ای دی کسی که نظر ارسال می کنرو ذخیره نمی کنین(کاربران غیر ثبت نامی هم می تونن نظر ارسال کنند) و بجاش ی فیلد گذاشتین که نام ارسال کنندرم هنگام ارسال نظر می گیرین می تونین این روشو پی بگیرین که وقتی ادمین نظر میده در کنترلر پک کنه اگر این ادمینه داره جواب مده property نام ارسال کننده یا همون author مساوی نام ادمین قرار بدین مثلا ی همچین چیزی :


//زcheck if statement for this user is amdin?
$model->author ='name of admin';


بعد مثل قبل نام را دریافت کنید
البته اینکارو می تونین تو تابع before save مدل کامنتم انجام بدین

shadecute
سه شنبه 21 بهمن 1393, 07:42 صبح
با سلام اگر در سیستم شما در جدول نظرات ای دی کسی که نظر ارسال می کنرو ذخیره نمی کنین(کاربران غیر ثبت نامی هم می تونن نظر ارسال کنند) و بجاش ی فیلد گذاشتین که نام ارسال کنندرم هنگام ارسال نظر می گیرین می تونین این روشو پی بگیرین که وقتی ادمین نظر میده در کنترلر پک کنه اگر این ادمینه داره جواب مده property نام ارسال کننده یا همون author مساوی نام ادمین قرار بدین مثلا ی همچین چیزی :


//زcheck if statement for this user is amdin?
$model->author ='name of admin';


بعد مثل قبل نام را دریافت کنید
البته اینکارو می تونین تو تابع before save مدل کامنتم انجام بدین

دقیقا همینطوره .بازدیدکننده های عادی می تونن نظر بدن و نیازی به ثبت نام نیست و نامشون در author ثبت میشه .
ولی فقط مدیر می تونه پاسخ بده و کاربران عادی نمی تونن پاسخ بدن اینجوری نوشتمش
128338
این عکس دیتا بیس . ببینید وقتی parent_id کامنت طرف رو نشون میده چرا نمی تونم نامشو نشون بدم :گریه::گریه: گیچ شدم .یعنی هیچ راهی نداره؟
برای مثال کامنت شماره 14 در پاسخ به کامنت 11 بوده و parent_id 11 رو داره حالا کامنت 11 من یک نام به اسم faraz داره اون اسم رو چطوری لود کنم هر کاری میکنم نمیشه

MMSHFE
سه شنبه 21 بهمن 1393, 09:29 صبح
از relationها استفاده کردین؟ parent_id کلید خارجی به کدوم جدوله؟ همینطوری بدون اطلاعات دقیق از دیتابیس و ساختار مدلهاتون نمیشه راهنمایی کنیم. اگه parent_id فیلد والد کامنت رو مشخص میکنه (این کامنت جواب کدوم کامنت هست) باید relation بزنید تا بتونین کار کنید وگرنه باید اینطوری انجام بدین:

if($parent = Comments::model()->findByPk($model->parent_id)) {
echo $parent->author;
}
else {
echo 'No parent';
}
اما اگه relation داشته باشین:

public function relations()
{
return array(
array('parent', self::BELONGS_TO, 'Comments', 'parent_id'),
array('replies', self::HAS_MANY, 'Comments', 'parent_id'),
);
}
اونوقت میتونین با $model->parent به والد یک کامنت و با $model->children به پاسخهای یک کامنت دسترسی پیدا کنید. مثال:

echo $model->parent->author;

shadecute
سه شنبه 21 بهمن 1393, 14:47 عصر
ممنون از شما
با استفاده از relation ها که شما و یکی از دوستان فرمود حل شد
باید کمی بیشتر از relation ها استفاده کنم اطلاعاتم کمه در این مورد
بازهم ممنونم