صفحه 4 از 9 اولاول ... 23456 ... آخرآخر
نمایش نتایج 121 تا 160 از 341

نام تاپیک: Yii vs Laravel

  1. #121

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط rezakho مشاهده تاپیک
    عجب حرفی میزنید، Eloquent یک ORM هست، مثل ActiveRecord در یی، یعنی یک لفاف روی متدهای کار با پایگاه داده، اون موارد که من توی پست قبلی گفتم موارد اختلافی بود، وگرنه اون ساختار واسط شی گرایی رو به هیچ وجه از دست نداده و هنوز خیلی چیزهاش مونده، ضمن اینکه فکر میکنید ساختار داخلی AR در یی چه شکلیه؟!
    در یی هم این اتفاق میافته، یعنی شما از AR استفاده میکنید، AR داده ها رو به QB میده و اونجا SQL اجرا میشه و روند معکوس اجرا میشه دوباره شما با شی سر و کار دارید.
    بهرحال وقتی توی Eloquent هم همه کارها دقیقاً مثل همون QB انجام میشه و هیچ ساده سازی انجام نشده، عملاً یک ساختار اضافه است و کاری بیشتر از یک Alias انجام نداده. کاری به پشت پرده ندارم که AR هم داره با QB کار میکنه یا نه ولی بهرحال وقتی توی Yii با QB میگیم:
    Yii::app()->db->createCommand()->from('users')->where('id=1')->delete();

    و توی AR میگیم:
    Users::model()->deleteByPk(1);

    به این میگن دو ساختار متفاوت. میدونم که لاراول هم چنین تغییراتی داره ولی اولاً شما بهش اشاره نکردین و ثانیاً اینکه دقیقاً به همون ساختار QB میشه توی Eloquent هم کار کرد رو مزیت شمردین درصورتی که حرف من اینه که وقتی میایم سراغ این ساختار، یعنی نمیخواستیم با QB کار کنیم و دلیلی نداره همون متدها با همون ساختار اینجا کپی بشن. این یعنی افزونگی در پیاده سازی فریمورک که مورد مثبت و خوبی نیست و به نوعی در برنامه نویسی یک ضعف محسوب میشه (هرگونه Duplicate ضعف محسوب میشه - چه در طراحی دیتابیس که با مواردی مثل نرمالسازی باید جلوی اینکار رو گرفت و چه در کدنویسی). امیدوارم این حرفم رو تأیید کنید.

  2. #122
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    من فقط این جمله رو میگم، چیزی کپی نشده، فقط به ارث برده شده، همین!

  3. #123

    نقل قول: Yii vs Laravel

    لطفاً با کلمات بازی نکنید. صحبت سر رابط بیرونی ارتباط با کاربره. من میگم اگه همون کارها رو بدون Eloquent هم میشه با خود QB با همون ساختار انجام داد، دلیلی نداشته که توی Eloquent تکرار بشه وگرنه ارث بردن ساختار QB برای AR در Yii هم کاری نداشته که بخوان اضافه کنن.

  4. #124

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط MMSHFE مشاهده تاپیک
    لطفاً با کلمات بازی نکنید. صحبت سر رابط بیرونی ارتباط با کاربره. من میگم اگه همون کارها رو بدون Eloquent هم میشه با خود QB با همون ساختار انجام داد، دلیلی نداشته که توی Eloquent تکرار بشه وگرنه ارث بردن ساختار QB برای AR در Yii هم کاری نداشته که بخوان اضافه کنن.
    خوب خود شما هم گفتید که انگار همین کار هم در Yii انجام میشه نه؟ من اینطور احساس میکنم که البته جسارت نشه شما حرفهای rezakho رو درست متوجه نشدید.

  5. #125
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    نمیدونم چرا مطلب پیچ میخوره بیخودی، ببینید، QB در لاراول سر جای خودش.
    همیشه که در مدل ها شما با متدهای ساده find و all و ... سرو کار ندارید! خیلی وقت ها و خیلی وقت ها، پیش میاد که میخواید از مدل، با شرطهای مختلف و یا ترتیب مختلف و ...، داده ها رو واکشی کنید. خوب لاراول میگه میتونید بدون دردسر و یادگیری متد جدید یا پیچیدگی بی خودی، داده ها رو با همون متدهای QB در مدل، بکشید بیرون، همین!
    حالا خواص خاص مدل بماند که به اونها هم میرسیم!

  6. #126

    نقل قول: Yii vs Laravel

    خوب همین دیگه، مسئله اینه که اگه بخوایم با متدهای QB بکشیم بیرون، خوب از همون QB استفاده میکنیم دیگه چرا مدل Load بشه؟ خیلی تنوع بخوایم، مثل Yii یک متد findAllBySql یا findBySQL در اختیار کاربر میگذاریم که کارهای عجیب و غریبش رو انجام بده. مسئله اصلاً پیچیده نیست. نمیدونم چرا منظورم رو متوجه نمیشین.

  7. #127

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط tux-world مشاهده تاپیک
    خوب خود شما هم گفتید که انگار همین کار هم در Yii انجام میشه نه؟
    بله ولی در پشت پرده. یعنی اینکه کاربر توی مدل AR دوباره نمیاد مثل QB کدنویسی کنه و اگه بخواد اونجوری کار کنه میره سراغ همون QB و ارائه تمام قابلیتهای QB مجدداً در مدل رو اضافه میدونم و مثال بارزی از افزونگی. اینطوری عملاً QB بلااستفاده میشه و بهتر بود دیگه اون رو ارائه نکنن. ببینید، کاربر یا میخواد با ساختار ActiveRecord (یا Eloquent در لاراول) کار کنه یا کار پیچیده ای داره که نیاز به QueryBuilder داره. حالا اگه خود مدل هم دوباره از AR استفاده میکنه دیگه به ما ربطی نداره. مهم اینه که ما برای حذف یک پست بنویسیم:
    Posts::model()->deleteByPk(1);

    و اگه میخوایم کوئری بنویسیم، از همون اول بریم سراغ QueryBuilder

  8. #128
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    جناب شهرکی، اجازه بدید مفاهیم Eloquent تمام بشه، خیلی از موارد حل میشه، لاراول برای مواردی که شما مد نظرتون هست مثل همین deleteByPk راه های بسیار کوتاه تری گذاشته

    و اینکه میگید چرا دیگه Eloquent اومده، خوب خودتون جواب دادید، مثل یی، برای کوئری های پیچیده، جوین ها، union ها، select های تو در تو و ... از QB استفاده میکنیم و برای کار با سطرها بدون استفاده از sql، از Eloquent استفاده میکنیم
    برای استفاده از رابطه های بین جداول در مدل از Eloquent استفاده میکنیم
    این ها که همپوشانی نداره!

    صبر کنید تا مثال ها رو بزنم

  9. #129

    نقل قول: Yii vs Laravel

    قضیه اینه که شما آقای شهرکی و آقای rezakho دقیقا حرفهاتون یکی هستش و هر دو به یه موضوع دارید اشاره میکنید ولی به نتیجه نمیرسید.

  10. #130
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    این مثال ها همون مشترک ها هست که قرار نبود گفته بشه، ولی به خاطر اینکه مفهوم بد جا نیافته، اینجا آورده شد

    برای ایجاد سطر جدید


    $user = new User;

    $user->name = 'John';

    $user->save();




    برای ویرایش

    $user = User::find(1);

    $user->email = 'john@foo.com';

    $user->save();



    برای حذف


    $user = User::find(1);

    $user->delete();

    // or
    User::destroy(1);

  11. #131
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    اگر میخواید من این جمله رو بگم که "عملاً یک ساختار اضافه است و کاری بیشتر از یک Alias انجام نداده"، باشه، قبول، تا اینجا من قبول میکنم که بحث تمام بشه
    ولی صبر کنید تا موارد دیگه هم برسه

  12. #132

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط rezakho مشاهده تاپیک
    برای ایجاد سطر جدید

    $user = new User;
    $user->name = 'John';
    $user->save();
    معادل Yii :

    $user = new User;
    $user->name = 'John';
    $user->save();

    برای ویرایش

    $user = User::find(1);
    $user->email = 'john@foo.com';
    $user->save();
    معادل Yii :

    $user = User::model()->findByPk(1);
    $user->email = 'john@foo.com';
    $user->save();

    برای حذف

    $user = User::find(1);
    $user->delete();
    // or
    User::destroy(1);
    معادل Yii :

    $User::model()->findByPk(1)->delete();
    // or
    User::model()->deleteByPk(1);

  13. #133

    نقل قول: Yii vs Laravel

    در ByPk مربوط به Yii فرقی نمیکنه که کلید اصلی چی باشه درسته؟

  14. #134

    نقل قول: Yii vs Laravel

    نه فرقی نداره. منظور همون فیلدی هست که Primary Key میگذارین که میتونه عددی یا رشته ای باشه. حتی اگه ترکیب همزمان چند فیلد رو Primary Key کرده باشین، میتونید اینطوری استفاده کنید:
    $userTag = UserTags::model()->findByPk(array('user_id'=>5,'tag_id'=>25));

  15. #135
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    در مورد push که گفتید نیاز به توضیح داره، این دستور مدل و تمام رکورد های رابطه ای مدل در جداول دیگه رو save میکنه

    خوب
    لاراول امکانی به نام soft deleting داره که اجازه میده رکوردها بعد از حذف، از جدول پاک نشند، بلکه تیکی بخورند به عنوان حذف شده ها یا اصطلاحا برن توی trash، که علاوه بر این، لاراول اجازه میده توی حذف شده جداگونه عملیاتی رو انجام بدیم و یا به رکودهای عادی بازیابی بشه و ...
    در حالت عادی، رکوردهای حذف شده در نتیجه کوئری ها ظاهر نمیشند مگر با متد withTrashed مشخص کنیم که بشند
    واکشی رکوردها همراه رکوردهای حذف شده (trashed)

    $users = User::withTrashed()->where('account_id', 1)->get();



    واکشی تمام پست های حذف شده کاربر (که البته از relationship استفاده شده که بعدا میرسیم)

    $user->posts()->onlyTrashed()->get();



    جستجو فقط در رکوردهای حذف شده

    $users = User::onlyTrashed()->where('account_id', 1)->get();



    بازیابی رکورد یا رکوردهای حذف شده

    $user->restore();

    User::withTrashed()->where('account_id', 1)->restore();




    حذف فیزیکی رکوردهای موجود در trash

    $user->forceDelete();



    چک کردن پر یا خالی بودن trash

    if ($user->trashed())
    {
    //
    }

  16. #136

    نقل قول: Yii vs Laravel

    تا جایی که از توضیحاتتون متوجه شدم این کار با کمک یک جدول واسطه که خود لاراول به دیتابیس اضافه میکنه انجام میشه درسته؟

  17. #137
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    نه، یک فیلد timestamp که البته خودش اضافه میکنه

  18. #138

    نقل قول: Yii vs Laravel

    خوب به این شکل Yii بطور توکار خودش نداره (تا جایی که بررسی کردم) ولی چند مورد Extension براش نوشته بودن که اونها رو که چک کردم، خوب پیاده سازی شده بودن. حتی یک نفر یک کلاس از ActiveRecord مشتق کرده بود و این قابلیت رو بهش اضافه کرده بود.

  19. #139
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    خوب لاراول به صورت داخلی 2 تا فیلد به عنوان زمان ایجاد و تغییر رو برای تمام مدلها پشتیبانی میکنه، که البته میشه فرمت فیلدها رو هم برای هر مدل مشخص کرد

    class User extends Eloquent {

    protected function getDateFormat()
    {
    return 'U';
    }

    }

  20. #140
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    در لاراول میشه به راحتی متدهای خوانا برای دستکاری شروط کوئری که خودش بهشون scope میگه اضافه کرد
    مثلا برای انتخاب کاربران اقا یک scope و برای انتخاب کاربران خانم یک scope اضافه کرد و به راحتی استفاده کرد

    // defination
    class User extends Eloquent {

    public function scopeMale($query)
    {
    return $query->where('gender', 'M');
    }

    public function scopeFemale($query)
    {
    return $query->where('gender', 'F');
    }

    }



    // for use
    $users = User::female()->orderBy('created_at')->get();

  21. #141

    نقل قول: Yii vs Laravel

    معادل Yii :

    class User extends CActiveRecord
    {
    ...
    public function scopes()
    {
    return array(
    'male'=>array(
    'condition'=>'gender=:gender',
    'params'=>array(':gender'=>'M'),
    ),
    'female'=>array(
    'condition'=>'gender=:gender',
    'params'=>array(':gender'=>'F'),
    ),
    'orderCreate'=>array(
    'order'=>'created_at',
    ),
    );
    }
    ...
    }

    // for use
    $users = User::model()->male()->orderCreate()->findAll();

    البته میشه Scope اضافه تر یعنی orderCreate رو هم تعریف نکرد و اینطوری ازش استفاده کنیم:
    $users = User::model()->female()->findAll(array('order'=>'created_at'));

  22. #142

    نقل قول: Yii vs Laravel

    ناگفته نمونه که در Yii میشه Scopeها رو بصورت متدهای مستقل هم تعریف کرد و حتی پارامتر ورودی بهشون داد. مثال:

    public function recently($limit = 5)
    {
    $this->dbCriteria->mergeWith(array(
    'order'=>'create_time DESC',
    'limit'=>$limit,
    ));
    return $this;
    }

    // for use
    $posts = Post::model()->published()->recently(3)->findAll(); // last 3 published posts
    $posts = Post::model()->published()->recently()->findAll(); // last 5 (default) published posts

  23. #143

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط rezakho مشاهده تاپیک
    خوب لاراول به صورت داخلی 2 تا فیلد به عنوان زمان ایجاد و تغییر رو برای تمام مدلها پشتیبانی میکنه، که البته میشه فرمت فیلدها رو هم برای هر مدل مشخص کرد...
    قابلیت خوبیه و قطعاً مفید بوده که توی Yii2 هم گفتن اضافه میشه ولی اون افزونه هایی که گفتم هم به شیوه جالبی کار میکردن (بجای تغییر تمام مدلها، یک جدول برای مدیریت این موارد ایجاد میکردن و تغییرات داخل اون اعمال میشد).

  24. #144
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    در لاراول هم ارسال پارامتر به scope ها پشتیبانی شده

    class User extends Eloquent {

    public function scopeOfType($query, $type)
    {
    return $query->whereType($type);
    }

    }


    // for user
    $users = User::ofType('member')->get();

  25. #145
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    خوب، بریم سراغ Relationship ها
    در لاراول ارتباط های زیر پشتیبانی میشه

    1- یک به یک
    2- یک به چند
    3- چند به چند
    4- چند ریختی
    5- چند به چند، چند ریختی


    1- یک به یک

    class User extends Eloquent {

    public function phone()
    {
    return $this->hasOne('Phone');
    }

    }

    // for user
    $phone = User::find(1)->phone;

  26. #146

    نقل قول: Yii vs Laravel

    1- معادل Yii :

    class User Extends CActiveRecord
    {
    ...
    public function relations()
    {
    return array(
    'phone'=>array(self::HAS_ONE, 'Phone', 'phone'),
    );
    }
    ...
    }

    // for use
    $phone = User::model()->findByPk(1)->phone;

  27. #147
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    2- یک به چند


    class Post extends Eloquent {

    public function comments()
    {
    return $this->hasMany('Comment');
    }

    }


    که به صورت زیر دسترسی داریم

    $comments = Post::find(1)->comments;


    و حتی میشه در commencts دوباره کوئری زد و از QB استفاده کرد

    $comments = Post::find(1)->comments()->where('title', '=', 'foo')->first();

  28. #148

    نقل قول: Yii vs Laravel

    2- معادل Yii :

    class Post Extends CActiveRecord
    {
    ...
    public function relations()
    {
    return array(
    'comments'=>array(self::HAS_MANY, 'Comment', 'post_id'),
    'fooComments'=>array(selef::HAS_MANY, 'Comment', 'post_id', 'where'=>'title=:title', 'params'=>array(':title'=>'foo')),
    );
    }
    ...
    }

    // for use
    $comments = Post::model()->findByPk(1)->comments;
    $comments = Post::model()->findByPk(1)->fooComments;

    البته اینطوری هم میشه نوشت:

    class Post Extends CActiveRecord
    {
    ...
    public function relations()
    {
    return array(
    'comments'=>array(self::HAS_MANY, 'Comment', 'post_id'),
    );
    }
    ...
    }

    // for use
    $comments = Post::model()->findByPk(1)->comments;
    $comments = Post::model()->findByPk(1)->comments(array('condition'=>'title=:title','param s'=>array(':title'=>'foo')));

    حالا یک مثال جالب از Yii (میخوام ببینم لاراول برای معادلسازیش چطور عمل کرده). فرض کنید میخوایم تمام پستهایی رو پیدا کنیم که توی کامنتهاشون، عبارت PHP نوشته شده بوده:

    class Post Extends CActiveRecord
    {
    ...
    public function relations()
    {
    return array(
    'comments'=>array(self::HAS_MANY, 'Comment', 'post_id'),
    );
    }
    ...
    }

    // for use
    $postsWithPHPComments = Post::model()->with('comments'=>array('contition'=>'LOWER(commen t) LIKE :comment','params'=>array(':comment'=>'%php%')))->findAll();
    آخرین ویرایش به وسیله MMSHFE : یک شنبه 11 اسفند 1392 در 15:08 عصر دلیل: تکمیل توضیحات

  29. #149

    نقل قول: Yii vs Laravel

    یک نکته: Yii در relations پارامترهای خیلی زیادی داره. برای مثال، یکی از این پارامترها together هست. اگه این پارامتر رو true بگذاریم، باعث میشه حتماً از Join استفاده بشه و تمام اطلاعات با یک کوئری از دیتابیس استخراج بشن ولی اگه false بگذاریم، خودش بطور خودکار دو کوئری جداگانه ارسال میکنه. برای مطالعه امکانات کامل Active Record Relations‌ در Yii توصیه میکنم این لینک رو حتماً ببینید. بعید میدونم Eloquent لاراول اینقدر منعطف و کامل باشه. برای اینکه کاربرد with رو هم متوجه بشین، اجازه بدین یکم توضیح بدم:
    با کمک with به Yii میگیم که از حالت Lazy Loading به Eager Loading بره. در حالت معمول، ما برای اینکه مثلاً سه پست اخیر رو همراه با کامنتهاشون در بیاریم، اینطوری مینویسیم:

    $posts = Post::model()->recently(3)->findAll();
    foreach($posts as $post) {
    ...
    foreach($post->comments as $comment) {
    ...
    }
    }

    در این حالت، اول با یک کوئری سه پست اخیر استخراج میشن و داخل حلقه اول، برای هر پست، وقتی post->comments$ رو صدا میزنیم، یک کوئری دیگه زده میشه و کامنتها دوباره استخراج میشه. اما اگه بگیم:

    $posts = Post::model()->recently(3)->with('comments')->findAll();
    foreach($posts as $post) {
    ...
    foreach($post->comments as $comment) {
    ...
    }
    }

    همون اول، با یک Join سه پست اخیر همراه با Commentهاشون از دیتابیس استخراج میشه.

  30. #150

    نقل قول: Yii vs Laravel

    حتی میشه عبارتهای Aggregate مثل count و min و max و... رو هم در Relationها بعنوان ارتباط تعریف کرد. مثال:

    class Post extends CActiveRecord
    {
    public function relations()
    {
    return array(
    'comments'=>array(self::HAS_MANY, 'Comment', 'post_id'),
    'commentCount'=>array(self::STAT, 'Comment', 'post_id'),
    );
    }
    }
    // for use
    echo Post::model()->findByPk(1)->commentCount;

  31. #151

    نقل قول: Yii vs Laravel

    یه مثال دیگه: فرض کنید میخوایم تمام پستهای کاربر جاری رو همراه با تمام کامنتهاش، از دیتابیس بکشیم بیرون. به Relation زیر دقت کنید:

    class Comment extends CActiveRecord
    {
    public function scopes()
    {
    return array(
    'approved'=>array('condition'=>'confirmed=1'),
    );
    }
    }
    class Post extends CActiveRecord
    {
    public function relations()
    {
    return array(
    'comments'=>array(self::HAS_MANY, 'Comment', 'post_id'),
    );
    }
    }
    class User extends CActiveRecord
    {
    public function relations()
    {
    return array(
    'posts'=>array(self::HAS_MANY, 'Post', 'author_id',
    'with'=>array('comments'=>array('scopes'=>'approve d')),
    ),
    );
    }
    }
    $currentUserPosts = User::model()->with('posts')->findByPk(Yii::app()->user->id);
    // or
    $user = User::model()->findByPk(Yii::app()->user->id);
    $posts = $user->posts;

    در هر دو حالت بخاطر وجود with در relation خاصمون به اسم posts، حالت Eager Loading استفاده میشه و همه اطلاعات با یک Join استخراج میشه.

  32. #152
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    در مورد معادل این کوئری زیر
    در یی

    $postsWithPHPComments = Post::model()->with('comments'=>array('contition'=>'LOWER(comm en t) LIKE :comment','params'=>array(':comment'=>'%php%')))->findAll();



    در لاراول

    $postsWithPHPComments = Post::whereHas('comments', function($query)
    {
    $query->where('LOWER(commen t)', 'LIKE', '%php%');

    })->get();

  33. #153

    نقل قول: Yii vs Laravel

    البته میشد کد Yii رو هم اینطوری بنویسیم که طولانی تر از کد لاراول بنظر نیاد:

    $postsWithPHPComments = Post::model()->with('comments'=>array(
    'contition'=>'LOWER(comment) LIKE :comment',
    'params'=>array(':comment'=>'%php%')
    ))->findAll();

  34. #154

    نقل قول: Yii vs Laravel

    حالا نگفتین میشه توی لاراول کاری کرد که Join نزنه و با کوئریهای جداگانه اطلاعات رو استخراج کنه (و در عین حال با همون روش Eager Loading کار کنه یعنی پست و کامنتهاش با هم همزمان استخراج بشن) ؟

  35. #155
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط MMSHFE مشاهده تاپیک
    حالا نگفتین میشه توی لاراول کاری کرد که Join نزنه و با کوئریهای جداگانه اطلاعات رو استخراج کنه (و در عین حال با همون روش Eager Loading کار کنه یعنی پست و کامنتهاش با هم همزمان استخراج بشن) ؟
    ماشاالله اینقدر پست زدید من تازه تونستم بخونمشون، بله، لاراول هم Eager Loading , Lazy Loading رو به همون روش یی ساپورت میکنه
    که البته قرار بود توی پست های آینده بگم که الان میگم

    مجبور کردن مدل به بارگذاری author به صورت Eager

    foreach (Book::with('author')->get() as $book)
    {
    echo $book->author->name;
    }


    لود چند رابطه به صورت eager

    $books = Book::with('author', 'publisher')->get();


    و حتی لود رابطهای تو در تو به صورت eager

    $books = Book::with('author.contacts')->get();

  36. #156

    نقل قول: Yii vs Laravel

    خیلی لذتبخشه که آدم میبینه اکثر فریمورکهای روز، قابلیتهای مفید و ضروری رو در خودشون قرار دادن. برای مثال بارگذاری چند رابطه همزمان و رابطه های تودرتو و ترکیب رابطه و Scope و... توی Yii هم پشتیبانی میشه که به دلیل طولانی نشدن تاپیک، اگه موافق باشین، دیگه تکرارش نکنم. فقط اگه ممکنه این بحث عدم استفاده از Join رو هم مشخص کنید چون بعضی جاها که جداول سنگین میشن و فیلدها و رکوردها زیاد میشه، Join واقعاً سربار ایجاد میکنه و اگه بشه از فریمورک خواست که بدون Join اطلاعات رو استخراج کنه، قابلیت سودمندی خواهد بود.

  37. #157
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    این مطلب آخر رو درست متوجه نشدم، ولی اگر منظورتون استفاده از select های تو در تو و یا where in به جای join هست، باید بگم بله، لاراول این روش ها رو هم پشتیبانی میکنه

  38. #158

    نقل قول: Yii vs Laravel

    نه ببینید:

    public function relations() {
    return array(
    'posts'=>array(self::HAS_MANY, 'Post', 'user_id', 'together'=>false),
    );
    }

    الآن بخاطر وجود together با مقدار false، حتی اگه بگیم:

    $user = User::model()->with('posts')->findByPk(1);
    echo $user->name;
    foreach($user->posts as $post) {
    ...
    }

    با وجودی که حالت Eager Loading حفظ شده و کاربر و پستهاش همه همزمان استخراج میشن، ولی Yii از دو کوئری جداگانه برای استخراج اطلاعات استفاده میکنه و Join نمیزنه. البته این مسئله با حالت زیر کاملاً فرق داره:

    $user = User::model()->findByPk(1);
    foreach($user->posts as $post) {
    ...
    }

    چون در حالت اول، همون لحظه ای که متغیر user$ ساخته شده، پستهاش هم استخراج شدن و توی متغیر user->posts$ قرار گرفتن (توی RAM) یعنی حالت Eager Loading
    ولی در حالت دوم، موقعی که حلقه foreach رو صدا میزنیم، تازه همون موقع یک کوئری دیگه اجرا میشه و پستها استخراج میشن یعنی حالت Lazy Loading

  39. #159
    کاربر دائمی
    تاریخ عضویت
    دی 1389
    محل زندگی
    اراک
    پست
    409

    نقل قول: Yii vs Laravel

    منظور بنده هم همین بود، لاراول به صورت پیشفرض برای eager loading ها، از join استفاده نمیکنه و به جاش از where in استفاده میکنه و فقط از 2 تا کوئری ساده برای واکشی رابطه ها و مدل استفاده میکنه

  40. #160

    نقل قول: Yii vs Laravel

    خوب اگه بخوایم مجبورش کنیم از Join استفاده کنه چه تغییری باید ایجاد کنیم؟ ضمن اینکه where in یه جاهایی کار نمیکنه. مثلاً من میخوام همه کاربران رو همراه با همه پستهاشون Load کنم. این کوئری که where in نداره.

صفحه 4 از 9 اولاول ... 23456 ... آخرآخر

تاپیک های مشابه

  1. حرفه ای: ایجاد بخش Yii Framework
    نوشته شده توسط sanay_esh در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 1
    آخرین پست: شنبه 20 آبان 1391, 23:32 عصر
  2. آموزش: Yii Framework - قسمت دوم
    نوشته شده توسط milanFan در بخش PHP
    پاسخ: 2
    آخرین پست: یک شنبه 21 خرداد 1391, 13:31 عصر
  3. Yii Framework
    نوشته شده توسط JavaDeveloper در بخش PHP
    پاسخ: 3
    آخرین پست: پنج شنبه 10 فروردین 1391, 18:32 عصر
  4. حرفه ای: Yii Framework راه اندازی UnitPHP جهت تست Unit ها
    نوشته شده توسط ostovarit در بخش PHP
    پاسخ: 0
    آخرین پست: جمعه 20 خرداد 1390, 12:38 عصر
  5. Yii Framework چیست؟
    نوشته شده توسط ostovarit در بخش توسعه وب (Web Development)
    پاسخ: 0
    آخرین پست: جمعه 20 خرداد 1390, 12:34 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •