relation ها رو هم تعریف کردم و کار می کنه اما مشکل اینه که چه کد بالا رو استفاده کنم چه نکنم فرقی بحالم نمی کنه و برای هر پست کل data مربوط به user اون پست رو میکشه بیرون ولی من گفتم فقط username رو می خوام
SELECT 't'."id" AS "t0_c0", 't'."title" AS
"t0_c1", 't'."content" AS "t0_c2", 't'."tags" AS "t0_c3", 't'."status" AS
"t0_c4", 't'."create_time" AS "t0_c5", 't'."update_time" AS "t0_c6",
't'."author_id" AS "t0_c7", 'author'."username" AS "t1_c1", 'author'."id"
AS "t1_c0" FROM 'tbl_post' 't' LEFT OUTER JOIN 'tbl_user' 'author' ON
('t'."author_id"='author'."id")
[rtl]که صحیح است، یعنی از جوین تیبل شما تنها author.username ظاهر شده (البته به استثنای author.id که لازمه انجام جوین است) و البته فیلدهای دیگری که مربوط به تیبل اصلی است ظاهر میشوند.
اما اگر فیلدهای تیبل اصلی را نیز نمیخواهید، یعنی کوئری بدین صورت مد نظر است:[/rtl]
SELECT 't'."id" AS "t0_c0",
'author'."username" AS "t1_c1", 'author'."id" AS "t1_c0" FROM 'tbl_post'
't' LEFT OUTER JOIN 'tbl_user' 'author' ON ('t'."author_id"='author'."id")
[rtl]که در آن تنها author.username وجود دارد (البته به استثنای author.id و t.id که لازمه انجام جوین است)
$criteria = new CDbCriteria;
$criteria->with = array('author'=>array('select'=>'author.USERNAME'));
// or the following code has a same result
// $criteria->with = array('author'=>array('select'=>'USERNAME'));
$criteria->with = array('category'=>array('select'=>'TITLE'));
$criteria->condition = 't.STATUS =1';
$dataProvider = new CActiveDataProvider($this,
array('criteria' => $criteria,
'pagination' => array(
'pageSize' => 10,
),
));
return $dataProvider;
[font="Tahoma"][rtl]و زمانی که $dataProvider رو print_r می کنم می بینم تو دیتای برگشتی password و اطلاعات پروفایل کاربر هم وجود داره و من نمی فهمم چرا[/rtl][/font]
من فرقی بین criteriaها نمی بینم فقط شما از تابع findAll استفاده کردی من از dataprovider و بخاطر قالبیت های این کلاس می خوام از همین کلاس استفاده کنم مگر اینکه این تابع کلا روشش این باشه نشه توش یه فیلد خاصی رو گرفت که البته بعید می دونم
ببین من دقیقا گیرم سر قسمت author بود من همه فیلد های post رو می خواستم و تنها فرقی که بین پست من و شما وجود داشت اینکه که اولا شما post رو هم محدود کردی که من نمی خواستم تو اون قسمت از select استفاده کنم چون همه فیلدهاشو می خواستم و همون select که تو with وجود داشت برا جدول author کافی بود و ضمنا فیلد من USERNAME هست و برا شما username که حالا من چه USERNAME و چه author.USERNAME می نوشتم و چه اصلا این کد رو برمی داشتم هیچ فرقی بحالم نمی کرد.
اما چی شد که درست شد؟
خیلی مسخره،
اون دوتا with که در دو پست قبلی در کد من میبیند رو نمی فهمید باید یه with میکردم، بنظرم احمقانست چون من تو condition هم همین مشکل رو دارم اگه همرو یکی بنویسم با AND جدا کنم می فهمه ولی چندتا مجزا می کنم نمی فهمه فقط اولی یا آخری اجرا میشه اما تو pdo مثلا اگه ۱۰ تا where جدا بنویسم خودش همرو با AND به هم وصل می کنه یه query میزنه نه اینکه فقط یکیش رو حساب کنه آخرش شد این عین بچه آدم کار کرد