گرفتن فیلد های خاص از Ar

[rtl][font="Tahoma"]

با سلام

دوستان من برا گرفتن فقط یک فیلد (username) در گرفتن کل post ها از این کد استفاده می کنم

[/font]

[/rtl]




$criteria->with = array('author'=>array('select'=>'USERNAME'));



[rtl][font="Tahoma"]

relation ها رو هم تعریف کردم و کار می کنه اما مشکل اینه که چه کد بالا رو استفاده کنم چه نکنم فرقی بحالم نمی کنه و برای هر پست کل data مربوط به user اون پست رو میکشه بیرون ولی من گفتم فقط username رو می خوام

لطفا راهنمایی کنید

ممنون

[/font]

[/rtl]

[rtl]اون with که استفاده کرده اید برای ارتباط و بارگزاری داده های جداول join شده است. کد کامل را قرار دهید با بشه بررسی اش کرد.

[/rtl]

[font="Tahoma"][rtl]من کد شما رو بدین صورت اجرا کردم:[/rtl]


$criteria = new CDbCriteria();

$criteria->with = array('author'=>array('select'=>'username'));

$models = Post::model()->findAll($criteria);

var_dump($models);

[rtl]این کوئری مربوطه بود:[/rtl]


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 که لازمه انجام جوین است)

میتوانید کد خود را بدین صورت تغییر دهید:[/rtl]


$criteria = new CDbCriteria();

$criteria->select = 'id';

$criteria->with = array('author'=>array('select'=>'username'));

$models = Post::model()->findAll($criteria);

var_dump($models);

[/font]

[font="Tahoma"][rtl]سلام دوباره این کد کامل منه:[/rtl][/font]




		//in post model, relation method

		'author' => array(self::BELONGS_TO, 'JTUser', 'CREATOR'),

		 ...




		//in user model, relation method

		'posts' => array(self::HAS_MANY, 'JTContentBank', 'USERID'),

		 ...






		$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]

[font="Tahoma"] [rtl]@Saeed Gholizadeh

کدی که من گذاشتم رو دیدید؟!

criteria که نوشتم رو تست کردید؟ [/rtl] [/font]

[font="Tahoma"] [rtl]

من فرقی بین criteriaها نمی بینم فقط شما از تابع findAll استفاده کردی من از dataprovider و بخاطر قالبیت های این کلاس می خوام از همین کلاس استفاده کنم مگر اینکه این تابع کلا روشش این باشه نشه توش یه فیلد خاصی رو گرفت که البته بعید می دونم

[/rtl] [/font]

[font="Tahoma"][rtl]لطفاً یکبار دیگه برو دو کد رو نگاه کن اگر بازهم فکر کردی فرقی بینشون نیست لطفاً پیغام بگذار![/rtl][/font]

[font="Tahoma"][rtl]

سلام

ببین من دقیقا گیرم سر قسمت author بود من همه فیلد های post رو می خواستم و تنها فرقی که بین پست من و شما وجود داشت اینکه که اولا شما post رو هم محدود کردی که من نمی خواستم تو اون قسمت از select استفاده کنم چون همه فیلدهاشو می خواستم و همون select که تو with وجود داشت برا جدول author کافی بود و ضمنا فیلد من USERNAME هست و برا شما username که حالا من چه USERNAME و چه author.USERNAME می نوشتم و چه اصلا این کد رو برمی داشتم هیچ فرقی بحالم نمی کرد.

اما چی شد که درست شد؟

خیلی مسخره،

اون دوتا with که در دو پست قبلی در کد من میبیند رو نمی فهمید باید یه with میکردم، بنظرم احمقانست چون من تو condition هم همین مشکل رو دارم اگه همرو یکی بنویسم با AND جدا کنم می فهمه ولی چندتا مجزا می کنم نمی فهمه فقط اولی یا آخری اجرا میشه اما تو pdo مثلا اگه ۱۰ تا where جدا بنویسم خودش همرو با AND به هم وصل می کنه یه query میزنه نه اینکه فقط یکیش رو حساب کنه آخرش شد این عین بچه آدم کار کرد

[/rtl][/font]

[PHP]

//befor -> only one is gunna work

$criteria->with = array(‘author’=>array(‘select’=>‘USERNAME’));

$criteria->with = array(‘category’=>array(‘select’=>‘TITLE’));

//after -> runs correctly

$criteria->with = array(‘author’=>array(‘select’=>‘USERNAME’),

		'category'=>array('select'=>'TITLE'));

[/PHP]

[rtl][font="Tahoma"]خوشحالم که مشکلتون حل شد

درسته غالباً وقتی یک متد رو مقدار میدید، دفعه بعد که مقدار داده میشه جایگزین مقدار قبلی میشه و این طبیعیه

[/font][/rtl]