انواع جستجوها در اکتیو رکورد

[rtl]

با سلام.

انواع جستجوها در Active Record چیا هستند؟

درباره find(), findAll() و… می دونم، بیشتر می خواهم تفاوت های اینها را بدانم و اینکه کدامیک برای کجا استفاده می شود؟

[/rtl]

[right]

سلام

اولین و مهمترین تفاوت این ۲ تا اینه که نتیجه تابع

find()

یک ابجکت خواهد بود اما نتیجه

findAll()

یک آرایه از آبجکت هاست

تفاوت های بعدی اینکه زمانی که از

find()

استفاده می کنیم :

حتما باید شرط نوشته شود و خود تابع به تنهایی قابل اجرا نیست

اولین مقداری که شرط را برآورده کند بازگردانده می شود و حتی اگر مقادیر دیگری وجود داشته باشد ، به آنها کاری ندارد

در صورتی که جستجو نتیجه ای نداشته باشد مقدار

NULL

برمیگرداند

مقداری که به عنوان نتیجه بازگردانده می شود به عنوان یک آبجکت به راحتی قابل لستفاده می باشد به عنوان مثال

[left]

$post=Post::model()->find($condition,$params);

echo $post->title

[/left]

تابع

findByPk()

هم تمامی شرایط تابع

find()

را دارد با این تفاوت که میتواند علاوه بر شرط و پارامتر یک فیلد هم به عنوان کلید اصلی به صورت مستقیم بگیرد مانند :

$post=Post::model()->findByPk($postID,$condition,$params);

اما برای تابع

findAll()

شرایط به شرح زیر می باشد:

حتما نباید شرط نوشته شود و خود تابع به تنهایی قابل اجرا است

[left]$post=Post::model()->findAll()[/left]

تمامی مقادیری که در شرط صادق باشند برگردانده می شود

در صورتی که جستجو نتیجه ای نداشته باشد یک آرایه خالی برگردانده میشود

برای توضیحات بیشتر این مقاله رو بخونید

مطلب تکمیلی

[/right]

[rtl]دست شما درد نکنه. مشکلم بیشتر با نحوه استفاده از اینها است. مخصوصا زمانی که از چندتا مدل رابطه دار استفاده می کنیم.[/rtl]

http://www.yiiframework.com/doc/guide/1.1/en/database.arr

[rtl]این را دیدم ولی متأسفانه فقط برای نحوه ارتباط مدلها گفته بود. ولی برای واکشی این اطلاعات خیلی نگفته بود.[/rtl]

[right]

منظورت از واکشی اطاعات رو متوجه نمیشم .

خوب یه

criteria

می نویسی و از طریق اون شرط هاتو مشخص می کنی و این توابع برات داده رو پیدا می کنن .

[/right]

[rtl]نه نه. منظورم از واکشی همون select از دیتابیس است. البته نمی خوام از DAO استفاده کنم. بلکه با همین روشها می خوام ببینم چطوریه؟

مثلا اون جایی که[/rtl]


$posts=Post::model()->with('author')->findAll();

[rtl]می گیره. می خوام ببینم چطوری از خروجی به دست میاره. و از آن چطور در ویو ها میشه استفاده کرد و یا حتی بعدا از آنها در create یا update هم استفاده کرد.[/rtl]

[right]خیلی آسونه بعد از اینکه پست ها رو گرفتی می زنی

[left]




foraeach ($posts as $post){

echo $post->title;

or whatever else


}


//if you have used only find and you have only one object, then $post->title will do the jobs.




[/left][/right]

[rtl]حالا شما فکر کنید که رابطه مدل ما یک به چند است. مثلا یه محصول چندتا عکس داره.

حالا چطوری باید عکس ها یک محصول را توی ویوی اون محصول بگیرم؟

[/rtl]

سلام.

شما مثلا توی view برای هر product می خواین مدلهای image مرتبط با اون رو نشون بدین:




public function actionView($id)

{

    $model = Product::model()->findByPk($id);

    $this->render('view', array(

        'model' => $model

    ));

}



توی view:




<?php foreach ($model->images as $image): ?>

    <?php echo CHtml::image($image->path); ?>

<?php endforeach; ?>



امیدوارم جواب سؤالتون رو داده باشم.

ممنون.

[rtl]دست شما درد نکنه. ببخشید میشه از تگ [rtl] استفاده کنید نوشته هایتان قاطی پاتی شده، به راحتی خونده نمیشه. باید ترجمه بشن.

[/rtl]

[font="Tahoma"][rtl][url=&quot;http://forum.iranphp.org/Thread-معادل-رابطه-ها-ی-AR-در-SQL&quot;]این جا رو یه نگاه بنداز شاید یه چیزایی دستگیرت بشه

[/url][/rtl][/font]