صفحه 5 از 9 اولاول ... 34567 ... آخرآخر
نمایش نتایج 161 تا 200 از 341

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

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

    نقل قول: Yii vs Laravel

    لاراول از چند روش در ارتباط ها استفاده میکنه، مثلا از where in و یا select های تو در تو برای بالابردن کارایی، خودش به صورت داخلی اینکار رو بر اساس نوع ارتباط و واکشی، انجام میده

    ضمن اینکه where in یه جاهایی کار نمیکنه. مثلاً من میخوام همه کاربران رو همراه با همه پستهاشون Load کنم. این کوئری که where in نداره.
    چرا میشه، لاراول اینجوری ارتباط یک به چند رو کوئری میگیره

    select * from `user`
    select * from `post` where `post`.`userId` in (1, 2, 3, 4, ...)

  2. #162

    نقل قول: Yii vs Laravel

    نه دیگه نشد! ببینید، الآن این دو تا کوئری جواب user->posts$ رو نمیدن. دقت کنید که وقتی توی Yii میگیم:

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

    و بعد میگیم:
    $user = User::model()->with('posts')->findAll();

    اول این کوئری اجرا میشه:
    SELECT * FROM `users`

    و بعد برای هر رکورد، این کوئری رو اجرا میکنه:
    SELECT * FROM `posts` WHERE (`user_id`='{$user->id}')

    و این رو بطور خودکار توی فیلد posts شئ user مربوطه قرار میده. این الآن دو تا Select هست که به ازای هر User داره Select دوم انجام میشه. Performance این روش با Select تو در تو از زمین تا آسمون فرق میکنه و اصلاً این روش، Select تو در تو نیست. ضمناً با where in هم نمیشه اون رو پیاده سازی کرد چون where in میاد پستهای همه کاربران رو یکجا استخراج میکنه و تفکیک شده نیست و باز باید جداشون کنیم و پستهای هر کاربر رو توی Object خودش بگذاریم.

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

    نقل قول: Yii vs Laravel

    من الان دارم تست میگیرم این نتیجه رو میده، شاید اشکال از ارتباط بین جداولم باشه، ولی دیدم که از جوین هم استفاده میکنه
    باید بیشتر کدهاش رو بررسی کنم
    آخرین ویرایش به وسیله rezakho : یک شنبه 11 اسفند 1392 در 21:28 عصر دلیل: اصلاح مطلب

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

    نقل قول: Yii vs Laravel

    با بررسی هایی که کردم، لاراول از join ها در ارتباط یک به چند استفاده نمیکنه
    و با 2 کوئری، همونطور که در بالا گفتم، کار رو انجام میده، که البته ارزش تست رو داره که معلوم بشه در رکوردهای بالا و تعداد فیلدهای زیاد، کدوم کارایی بیشتری دارند
    join ها یا واکشی کلی و جداسازی در سمت php ؟!

  5. #165

    نقل قول: Yii vs Laravel

    خوب البته برخی جاها واقعاً هیچ راهکاری مناسبتر و ساده تر از Join نیست. برای مثال، فرض کنید توی صفحه مربوط به پست، بخواین کاربرانی که برای اون پست کامنت گذاشتن رو استخراج کنید. توی Yii این مسئله رو میشه اینطوری انجام داد:
    $users = Users::model()->with('comments', array('condition'=>'post_id=:postId','params'=>arr  ay(':postId'=>$this->id)))->findAll();

    منظورم بحث ادغام سه جدوله. مطمئناً لاراول هم راه حل خاص خودش رو برای این موضوع داره و این مسئله، محور صحبتم نیست. میخوام بگم کلاً این قابلیت together که Yii اضافه کرده که به انتخاب خودمون بگیم کجا Join بزنه و کجا از Join استفاده نکنه، قابلیت خوبیه.

  6. #166

    نقل قول: Yii vs Laravel

    به نظرم آقای rezakho منظورشون این بود که تو هسته لاراول هستش که به صورت پیش فرض از Join استفاده نمیکنه مگر اینکه مثل ایی مجبور به استفادش کنیم. در کل هر دو فریم ورک این قابلیت رو دارن و تفاوتی هم نداره

  7. #167

    نقل قول: Yii vs Laravel

    همین دیگه میخوام ببینم این قابلیت رو داره که مجبورش کنیم Join بزنه؟ چون توی مستنداتش ندیدم (شایدم باشه و من نتونستم پیدا کنم).

  8. #168

    نقل قول: Yii vs Laravel

    اینطور که من جستجو کردم و مطلع شدم اینه که لاراول از جوین استفاده نمیکنه. دلیلش رو متاسفانه پیدا نکردم.برای همین فکر میکنم راه دیگه ای رو برای استفاده نکردن انتخاب کرده که متاسفانه این مورد رو هم نتونستم بفهمم

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

    نقل قول: Yii vs Laravel

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

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

    نقل قول: Yii vs Laravel

    3- ارتباط چند به چند
    که از جدول واسط با نام مثلا user_roles با فیلدهای user_id و role_id استفاده شده

    class User extends Eloquent {

    public function roles()
    {
    return $this->belongsToMany('Role', 'user_roles', 'user_id', 'foo_id');
    }

    }



    class Role extends Eloquent {

    public function users()
    {
    return $this->belongsToMany('User', 'user_roles', 'foo_id', 'user_id');
    }

    }

  11. #171

    نقل قول: Yii vs Laravel

    معادل Yii :

    class User extends Eloquent {
    public function relations() {
    return array(
    'roles'=>array(self::MANY_MANY, 'Role', 'user_roles(user_id,role_id)'),
    );
    }
    }

    class Role extends Eloquent {
    public function relations() {
    return array(
    'users'=>array(self::MANY_MANY, 'User', 'user_roles(role_id,user_id)'),
    );
    }
    }

  12. #172

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط rezakho مشاهده تاپیک
    سلام
    ببخشید وقت نبود
    لاراول کلا از جوین در رابطه ها استفاده نمیکنه، دلیلش رو نمیدونم، و نمیتونه هم استفاده کنه به صورت خودکار، مگر خودمون جوین بزنیم در صورت نیاز با QB
    خوب پس این مورد رو میتونیم بعنوان یک امتیاز منفی محسوب کنیم یا حداقل بعنوان یک ویژگی که Yii داره و Laravel نداره.

  13. #173

    نقل قول: Yii vs Laravel

    برای Yii انگار فرمودید که به صورت داخلی تو هسته نیستش با اکستندهایی که انجام شده تونستن از این قابلیت استفاده کنن و در نسخه جدید هم قرار شده این قابلیت رو نهایی کنن. ولی خوب QB برای یه سری کارهای پیچیده و یا مواردی که به راحتی نمیشه از الکوئنت و یا اکتیو رکورد استفاده کرد کاربرد داره

  14. #174
    کاربر دائمی آواتار engmmrj
    تاریخ عضویت
    مرداد 1391
    محل زندگی
    تهران
    پست
    1,146

    نقل قول: Yii vs Laravel

    در یکی از سایت ها نوشته بود Laravel دارای code generator نیست ، درسته ؟

  15. #175

    نقل قول: Yii vs Laravel

    نه درست نیست. هستش.لاراول مثل Yii خودش ابزاری شبیه gii داره به اسم artisan که خودش شبیه gii در لاراول هستش که به صورت gui م قابل استفاده هستش و توسط بعضی از کاربراش توسعه داده شده و کاملترش کرده و به صورت باندل قابل استفاده هستش این لینک رو مطالعه کنید

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

    نقل قول: Yii vs Laravel

    سلام
    ببخشید از تاخیرم

    در مورد جوین ها در eloquent، نه که نداشته باشه، قبلا هم گفتم بحث اینه که به صورت پیشفرض برای ارتباط ها از جوین استفاده نمیکنه، من کدهای هسته اش رو بررسی کردم و تنظیمی برای مشخص کردن استفاده از جوین بجای where in نداره متاسفانه!
    به مدیر تیم توسعه اش ایمیل دادم، ببینم چی جواب میده، دلیلش رو هم واقعا نمیتونم جوابی براش پیدا کنم، ولی به هر حال به این شکل میشه پیادش کرد


    public function posts()
    {
    return $this->join('posts', 'users.id', '=', 'posts.user_id')
    ->select('posts.*')
    ->get();
    ;
    }

  17. #177
    کاربر دائمی آواتار metal gear solid 4
    تاریخ عضویت
    مهر 1387
    محل زندگی
    مشهد
    پست
    307

    نقل قول: Yii vs Laravel

    ببینید، من اینقدر دیگه سن و تجربه دارم که نخوام احساساتی صحبت کنم. اینکه Yii دو ساله نسخه جدید نداده بخاطر این بوده که واقعاً نسخه قبلی جوابگو بوده و نیاز نبوده کلی مشکلات رو که ناشی از ناشی بودن طراحانش بوده، مرتب با نسخه های جدید، بپوشونه. کاری به این موضوع نداریم چون لاراول اگه خوب نوشته میشد از اول، توی هر نسخه از پایه تغییر نمیکرد و تغییراتش Minor میشد نه Major
    به نقل از Yiiframework.com

    The latest release of Yii 2 is 2.0.0 alpha.


    Yii 2.0 is a complete rewrite of Yii on top of PHP 5.4.0. It is aimed to become a state-of-the-art of the new generation of PHP framework. Yii 2.0 is not compatible with 1.1.
    Yii 2.0 is not ready for production use yet. It is currently under heavy development and we may introduce significant changes without prior notices. You may consider using Yii 2.0 if you just start to learn Yii or you do not have a tight project schedule.

    این که نوشتند Yii داره با قابلیت های PHP 5.4 ساخته میشه رو زیاد جدی نگیرید. من چند ماه قبل نگاه میکردم PHP 5.3 بود. این یعنی با به روز شدن PHP این قسمت از متن هم به روز میشه! ( البته مطمعناً از قابلیت های نسخه های جدید PHP استفاده میکنن ... )
    تغییرات Major هم یعنی این. مثل خیلی از فریمورک های دیگه.



    راجع به JOIN زدن هم توجیه نمیکنم کار لاراول رو. ولی حداقل من خوشحالم که از JOIN استفاده نمیکنه. البته این که انتخاب داشته باشیم از JOIN استفاده کنیم یا خیر گزینه ی خوبیه اما حالا که استفاده نمیکنه پیش فرض بهتری از استفاده کردنشه. وقتی جداول سنگین بشن باید از روشهای غیر JOIN استفاده کرد.

  18. #178

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط metal gear solid 4 مشاهده تاپیک
    البته این که انتخاب داشته باشیم از JOIN استفاده کنیم یا خیر گزینه ی خوبیه اما حالا که استفاده نمیکنه پیش فرض بهتری از استفاده کردنشه. وقتی جداول سنگین بشن باید از روشهای غیر JOIN استفاده کرد.
    شما از چه راههای برای عدم استفاده از join استفاده میکنید؟ ممنون میشم کدی رو که استفاده میکنید بگید

  19. #179
    کاربر دائمی آواتار metal gear solid 4
    تاریخ عضویت
    مهر 1387
    محل زندگی
    مشهد
    پست
    307

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط tux-world مشاهده تاپیک
    شما از چه راههای برای عدم استفاده از join استفاده میکنید؟ ممنون میشم کدی رو که استفاده میکنید بگید
    من توی دو پروژه ی اخیرم به دلیل تعداد درخواست های بسیار بالا به سرور و سنگین بودن جداول کلاً JOIN زدن رو بیخیال شدم. ( با استفاده از JOIN هم بنچمارک گرفتم. نتایج افتضاح بود ) بنا به نیاز حتی Normalization رو هم فدای Performance کردیم. در این مورد میشه از SELECT های تو در تو استفاده کرد اما خب من به دلیل نوع پروژه هام از روش های کاملاً نامرتبطی به بحث این تاپیک استفاده میکنم. از بانک های اطلاعاتی رابطه ای در کنار غیر رابطه ای استفاده میکنم. MySQL در کنار mongoDB و Redis

  20. #180

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط metal gear solid 4 مشاهده تاپیک
    تغییرات Major هم یعنی این. مثل خیلی از فریمورک های دیگه.
    درسته من نگفتم Yii تغییرات ماژور نداره و نسخه 2 کاملاً بازنویسی هسته Yii هست ولی بهرحال بعد از 6 سال این بازنویسی انجام شده و بخاطر این نبوده که نسخه قبلی کارآمد نبوده بلکه یکسری تغییرات در هسته اتفاق افتاده و خیلی چیزها رو ارتقا دادن و یکسری موارد هم بهش بطور کاملاً جدید اضافه شده (مثل پشتیبانی از دیتابیسهای جدید و ساختار مبتنی بر namespace که در پروژه های جدید مطرح شده). بهرحال موضوع صحبت این تاپیک، اینجور مسائل نیست و بهتره به همون روال قبل برگردیم و تفاوتهای فریمورکها رو مطرح کنیم تا دوباره کار به بحث و سوء تفاهم و کدورت و... کشیده نشه.
    راجع به JOIN زدن هم توجیه نمیکنم کار لاراول رو. ولی حداقل من خوشحالم که از JOIN استفاده نمیکنه. البته این که انتخاب داشته باشیم از JOIN استفاده کنیم یا خیر گزینه ی خوبیه اما حالا که استفاده نمیکنه پیش فرض بهتری از استفاده کردنشه. وقتی جداول سنگین بشن باید از روشهای غیر JOIN استفاده کرد.
    اتفاقاً اگه اصول نرمالسازی رعایت شده باشه و از شکل مناسب JOIN هم برحسب نیاز استفاده بشه (مثل LEFT OUTER JOIN و RIGHT JOIN و INNER JOIN و NATURAL JOIN و...) سربار آنچنانی روی نتیجه کلی ایجاد نمیکنه و درعوض ما رو از نوشتن چندین کوئری برای رسیدن به نتیجه ای که میشه با یک کوئری بدست آورد، بی نیاز میکنه. این مسئله حتی در دیتابیسهای سنگین و جداول با چندین میلیون رکورد هم صدق میکنه.
    آخرین ویرایش به وسیله MMSHFE : پنج شنبه 15 اسفند 1392 در 21:33 عصر دلیل: اشتباه در نقل قول

  21. #181

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط rezakho مشاهده تاپیک
    سلام
    ببخشید از تاخیرم
    در مورد جوین ها در eloquent، نه که نداشته باشه، قبلا هم گفتم بحث اینه که به صورت پیشفرض برای ارتباط ها از جوین استفاده نمیکنه، من کدهای هسته اش رو بررسی کردم و تنظیمی برای مشخص کردن استفاده از جوین بجای where in نداره متاسفانه!
    به مدیر تیم توسعه اش ایمیل دادم، ببینم چی جواب میده، دلیلش رو هم واقعا نمیتونم جوابی براش پیدا کنم، ولی به هر حال به این شکل میشه پیادش کرد...
    روشی که اشاره کردین، عملاً همون استفاده از QueryBuilder هست که گفتیم موضوع بحث ما نیست چون برای مثال، توی Yii هم با CDbCommand (همون QueryBuilder در Yii) میشه اعمالی مثل Lock و... رو انجام داد. بهرحال فکر میکنم بهتره این مورد رو به نفع Yii تمام کنیم و بریم سراغ بقیه موارد.

  22. #182

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط tux-world مشاهده تاپیک
    برای Yii انگار فرمودید که به صورت داخلی تو هسته نیستش با اکستندهایی که انجام شده تونستن از این قابلیت استفاده کنن و در نسخه جدید هم قرار شده این قابلیت رو نهایی کنن. ولی خوب QB برای یه سری کارهای پیچیده و یا مواردی که به راحتی نمیشه از الکوئنت و یا اکتیو رکورد استفاده کرد کاربرد داره
    خیر پشتیبانی از Join در Yii بصورت داخلی هست. اون مورد که گفتم، بحث Lock و Soft Delete بود که گفتم توی نسخه جدید قراره اضافه بشه و فعلاً میشه از Extensionهایی که برای این مقاصد طراحی شده، استفاده کرد.

  23. #183

    نقل قول: Yii vs Laravel

    منم منظورم همون lock بود

  24. #184

    نقل قول: Yii vs Laravel

    بله Lock رو در نسخه فعلی، حداقل تا جایی که من بررسی کردم به راحتی لاراول نداره و باید از همون QueryBuilder استفاده کنیم.

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

    نقل قول: Yii vs Laravel

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

    countries
    id - integer
    name - string

    users
    id - integer
    country_id - integer
    name - string

    posts
    id - integer
    user_id - integer
    title - string


    میشه به این صورت ارتباطی بین جدول countries و posts ایجاد کرد

    class Country extends Eloquent {
    public function posts()
    {
    return $this->hasManyThrough('Post', 'User', 'country_id', 'user_id');
    }
    }


    و در نهایت اینطور ازش استفاده کرد

    $posts = Country::find(1)->posts;

  26. #186

    نقل قول: Yii vs Laravel

    معادل Yii :

    class Country extends CActiveRecord {
    public function relation(){
    return array(
    'users' => array(self::HAS_MANY, 'User', 'country_id'),
    'posts' => array(self::HAS_MANY, 'Post', 'post_id', 'through'=>'users'),
    );
    }
    }

    $posts = Country::model()->findByPk(1)->posts;

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

    نقل قول: Yii vs Laravel

    لاراول از ارتباط های چند ریختی! هم پشتیبانی میکنه
    مثلا میشه 2 جدول رو به یک جدول ارتباط یک به چند زد
    مثلا سه جدول به صورت زیر داریم

    staff
    id - integer
    name - string

    orders
    id - integer
    price - integer

    photos
    id - integer
    path - string
    imageable_id - integer
    imageable_type - string


    به صورت زیر روابط رو تعزیف میکنیم

    class Photo extends Eloquent {

    public function imageable()
    {
    return $this->morphTo();
    }

    }

    class Staff extends Eloquent {

    public function photos()
    {
    return $this->morphMany('Photo', 'imageable');
    }

    }

    class Order extends Eloquent {

    public function photos()
    {
    return $this->morphMany('Photo', 'imageable');
    }

    }


    و به صورت زیر استفاده کنیم،
    برای گرفتم تصاویر که مثل ارتباط یک به چنده
    ولی برای گرفتن صاحب یک تصویر، خروجی یکی از مدل های User یا Staff خواهد بود

    // fetching photos
    $photos = Staff::find(1)->photos;


    // $owner is a User or Staff model
    $owner = Photo::find(1)->imageable;

  28. #188

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط MMSHFE مشاهده تاپیک
    معادل Yii :

    'posts' => array(self::HAS_MANY, 'Post', 'post_id', 'through'=>'users'),
    منظور از این خط چیه؟ و همینطور through

  29. #189

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط tux-world مشاهده تاپیک
    منظور از این خط چیه؟ و همینطور through
    یعنی اینکه جدول Country با جدول Post ارتباط یک به چند داره ازطریق ارتباط users که در خط قبلی تعریف کردیم (through یعنی ازطریق). اینطوری وقتی مینویسیم:
    $posts = Country::model()->findByPk(1)->posts;

    مثل اینه که همه کاربران یک کشور خاص رو پیدا کنیم و بعد با حلقه foreach چنین دستوراتی رو بنویسیم:

    $users = Country::model()->findByPk(1)->users;
    $posts = array();
    foreach($users as $user) {
    array_push($posts, $user->posts);
    }
    $posts = array_unique($posts);

    برای درک بهتر، این لینک رو ببینید.

  30. #190

    نقل قول: Yii vs Laravel

    نقل قول نوشته شده توسط rezakho مشاهده تاپیک
    لاراول از ارتباط های چند ریختی!...
    طبق این لینک ارتباط چندریختی توی دیتابیس یک ارتباط مناسب نیست و توصیه نمیشه و به همین دلیل هم در Yii قرار داده نشده. بنا به دلایل زیر:
    نمیتونید قید بزنید:

    CREATE TABLE Comments (
    comment_id SERIAL PRIMARY KEY,
    comment TEXT NOT NULL,
    issue_type VARCHAR(15) NOT NULL CHECK (issue_type IN (`Bugs`, `Features`)),
    issue_id INT NOT NULL,
    FOREIGN KEY issue_id REFERENCES ???
    );

    درنتیجه مجبورین جدول رو بدون کلید خارجی و Relation واقعی بسازین:

    CREATE TABLE Comments (
    comment_id SERIAL PRIMARY KEY,
    comment TEXT NOT NULL,
    issue_type VARCHAR(15) NOT NULL CHECK (issue_type IN (`Bugs`, `Features`)),
    issue_id INT NOT NULL,
    );

    بنابراین نمیتونید از Join استفاده کنید:

    SELECT * FROM Comments
    JOIN ???
    USING (issue_id);

    یا اینکه همزمان روی هر دو جدول Join بزنید:

    SELECT * FROM Comments c
    LEFT JOIN Bugs b ON (c.issue_type = 'Bugs' AND c.issue_id = b.issue_id)
    LEFT JOIN Features f ON (c.issue_type = 'Features' AND c.issue_id = f.issue_id);

    تازه همه این توضیحات و دردسرها فقط توی SELECT هست و تصور کنید چه بلایی سر برنامه شما موقع UPDATE و DELETE و... و اصلاح ارتباطها میاد چون قید وجود نداره و باید همه چیز دستی با کوئریهای جداگانه انجام بشه.
    البته یکسری راههای جایگزین هم هست:
    کمانهای انحصاری (وجود دو فیلد bug_id و feature_id در مثال فوق به نحوی که در هر لحظه فقط یکیشون برای هر رکورد مقدار داشته باشه که فقط باعث میشه Joinها ساده تر بشه ولی باز هم باید هر دو Join انجام بشه
    معکوس کردن Relation (از Bugs یا Features ارتباط HAS_MANY به Comments بزنیم و یا از جدولهای واسط استفاده کنیم)
    استفاده از جدول والد مشترک

    توضیح تخصصی این مقوله خارج از موضوع این تاپیکه و شدیداً مطالعه لینکی که گذاشتم رو توصیه میکنم (ساختار دستورات SQL بصورت استاندارد هست نه MySQL)

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

  31. #191

    نقل قول: Yii vs Laravel

    به لحاظ چند ریختی بودن. برای یکی از پروژه های که داشتم مجبور به استفاده بودم. نیازی به پرفورمنس و چیزهای دیگه نداشتم ولی موضوعی که برام اهمیت داشت ارتباط یک داده با چند تا بود. مثل همونی که آقای rezakho گفتن و یه عکس رو مثال زدن

  32. #192

    نقل قول: Yii vs Laravel

    یه سوال به ذهنم رسید.
    اگه ما نخاییم از چند ریختی استفاده کنیم. چطور میتونیم مثل سایتهایی همانند گوگل و یا فیسبوک که چندین کاربر میتونن یک مطلب رو به اشتراک بزارن رو بفهمیم؟ راهی به غیر از این مدل استفاده میکنن؟

  33. #193

    نقل قول: Yii vs Laravel

    این مسئله کاملاً بی ارتباط با چند ریختیه. اونجا فرضاً جدولی به نام users هست و جدولی به نام posts و جدول دیگری هم هست به نام shares با این ساختارهای فرضی:

    Users
    id
    name
    Posts
    id
    title
    body
    user_id
    Shares
    user_id
    post_id

    حالا با ارتباط بین Posts و Users میشه فرضاً فهمید هر پست در اصل توسط چه کسی ایجاد شده و هر کسی هم که یک مطلب رو Share میکنه، یک رکورد توی جدول Shares براش درج میشه. درواقع جدول Posts و Users ازطریق جدول Shares ارتباط چند به چند دارن (هم یک کاربر میتونه چند Post داشته باشه و هم یک پست میتونه توسط چند User به اشتراک گذاشته بشه). همونطور که گفتم، این مسئله کاملاً با چندریختی تفاوت داره چون توی چندریختی درواقع یک فیلد، کلید اتصال به بیش از یک جدول دیگه میشه و برای اینکار هم از یک فیلد واسطه کمکی استفاده میکنیم که مشخص میکنه فیلد کلید (که در واقعیت کلید نیست و ما خودمون بهش میگیم کلید)، به کدوم جدول داره اشاره میکنه و فرضاً اگه توی فیلد کلید مقدار 5 بود، این 5 یعنی رکورد پنجم از کدوم جدول. توصیه میکنم لینکی که گذاشته بودم درمورد چندریختی رو حتماً یکبار دیگه به دقت مطالعه کنید.

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

    نقل قول: Yii vs Laravel

    ببخشید
    خیلی وقتم کمه، به همین خاطر کم میرسم بیام
    خوب، از ارتباط چند به چند چند ریختی هم میگذرم، عطاش رو به لقاش بخشیدیم !

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

    الصاق یک کامنت به یک پست (چند به یک)

    $comment = new Comment(array('message' => 'A new comment.'));
    $comment = Post::find(1)->comments()->save($comment);



    درج کاربر در یک گروه کاربری خاص (یک به چند)

    $account = Account::find(10);
    $user->account()->associate($account);
    $user->save();



    انتصاب و گرفتن یک یا چند رول به یک کاربر (چند به چند)

    $user->roles()->attach(1);
    $user->roles()->detach(1);

    // attach multi role
    $user->roles()->sync(array(1, 2, 3));
    آخرین ویرایش به وسیله rezakho : سه شنبه 20 اسفند 1392 در 10:15 صبح دلیل: اصلاح متن

  35. #195

    نقل قول: Yii vs Laravel

    این مورد رو تا جایی که چک کردم پیدا نکردم. حدس میزنم خوب جستجو نکرده باشم چون قابلیت لازم و ضروری هست و قاعدتاً باید داشته باشه ولی راستش موندم چی جستجو کنم ولی بهرحال تا اینجا متوجه شدم توی هسته چیزی نبود و توی نسخه 2 اضافه شده و برای نسخه 1.1.14 چندتا افزونه خیلی خوب و کارآمد براش پیدا کردم که برای کسانی که از Yii استفاده میکنن، لینکشونو میگذارم:
    - esaverelatedbehavior
    - xrelationbehavior
    - eadvancedarbehavior
    - esaverelatedbehavior
    - save-relations-ar-behavior

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

    نقل قول: Yii vs Laravel

    خوب، لاراول خروجی های کوئری و eloquent رو به صورت collection بر میگردونه که میتونه به صورت زیر مورد استفاده قرار بگیره

    چک کردن وجود کلید خاص در مجموعه

    //checking if users contains 2 key
    $users = User::where('type', '=', 'admin')-.get();

    if ($users->contains(2))
    {
    //
    }


    تبدیل به آرایه و json

    //convert to array or json
    User::find(1)->toArray();
    User::find(1)->toJson();

    //convert to json automatical
    echo User::find(1);


    پیمایش مجموعه

    //iterating collections
    $users = $users->each(function($user)
    {
    //
    });


    فیلتر عناصر مجموعه

    //filtering collections
    $users = $users->filter(function($user)
    {
    return $user->isAdmin();
    });


    الصاق یک callback به هر یک از اعضای مجموعه (برای این callback هم اگر هست معادل فارسی خوبی پیشنهاد بدید)

    //applying a callback to each collection object
    $users = User::all();

    $users->each(function($user)
    {
    //
    });


    مرتب کردن

    //sorting a collection by value
    $users = $users->sortBy(function($user)
    {
    return $user->created_at;
    });

    //or

    $users = $users->sortBy('created_at');

  37. #197

    نقل قول: Yii vs Laravel

    از اونجایی که خروجی findAll توی AR در 1.1.14 یک آرایه است، درنتیجه یکسری کارها باید دستی توی Yii پیاده سازی بشه.
    نقل قول نوشته شده توسط rezakho مشاهده تاپیک
    چک کردن وجود کلید خاص در مجموعه
    معادل Yii:

    $users = User::model()->findAll('type=:type', array(':type'=>'admin'));
    foreach($users as $user) {
    if($user->equals(User::model()->findByPk(2)) { // or if($user->id == 2) {
    ...
    }
    }
    // or
    if(in_array(User::model()->findByPk(2), $users)) {
    ...
    }

    تبدیل به آرایه و json
    معادل Yii

    User::model()->findByPk(1)->attributes;
    CJSON::encode(User::model()->findByPk(1)->attributes);
    $user = new User;
    $user->attributes = CJSON::decode($json);

    پیمایش مجموعه

    foreach($users as $user) {
    ...
    }

    فیلتر عناصر مجموعه
    این کار توی Yii با استفاده از Scopeها انجام میشه. روش معادل در Yii :

    class User extends CActiveRecord {
    public function scopes() {
    return array(
    'isAdmin'=>array('condition'=>'is_admin=:isAdmin', 'params'=>array(':isAdmin'=>1)),
    );
    }
    }
    $users = Users::model()->isAdmin()->findAll();

    الصاق یک callback به هر یک از اعضای مجموعه (برای این callback هم اگر هست معادل فارسی خوبی پیشنهاد بدید)
    از اونجا که در Yii خروجی findAll و... یک آرایه معمولی هست، نیازی به استفاده از callback و تعریف تابع بدون نام و... نیست. معادل Yii :

    $users = User::model()->findAll();
    foreach($users as $user) {
    ...
    }
    // or
    while($user = each($users)) {
    ...
    }

    ضمناً معادل callback توی فارسی میشه «پاسخ به تماس» یا «تماس برگشتی» یا «تماس بازگشتی» که همون callback بگیم بهتره!
    مرتب کردن
    باز هم به دلیل اینکه خروجی findAll در Yii یک آرایه معمولی هست، باید از روشهای مربوط به آرایه ها استفاده کنیم. روشهای معادل در Yii :

    function mySort($a, $b) {
    if ($a->created_at == $b->created_at) {
    return 0;
    }
    return ($a->created_at < $b->created_at ? -1 : 1);
    }
    $users = User::model()->findAll();
    usort($users, 'mySort');
    // or simply:
    $users = User::model()->findAll(array('order'=>'created_at'));
    آخرین ویرایش به وسیله MMSHFE : سه شنبه 20 اسفند 1392 در 23:59 عصر دلیل: تکمیل توضیحات

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

    نقل قول: Yii vs Laravel

    خوب در لاراول اوینت های زیر برای مدل معرفی شده
    که البته در لاراول میشه چند دستگیره رو به یک ایونت اتچ کرد، دقیقا مثل C#‎‎‎‎ و jQuery
    creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored
    ing دارها همون before و ed دارها همون after هستند

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

    User::creating(function($user)
    {
    //
    });

    //another
    User::creating(function($user)
    {
    //
    });


    همچنین برای نوشتن ایونت ها در داخل مدل، میشه از متد boot مدل که مثل متد سازنده شی ها هست، استفاده کرد

    class User extends Eloquent {
    public static function boot()
    {
    parent::boot();

    static::creating(function($user)
    {
    //
    });
    }
    }

  39. #199

    نقل قول: Yii vs Laravel

    خوب این مورد رو Yii هم داره و رویدادهای مختلف و پیشفرض زیادی داره و میشه رویدادهای جدید هم تعریف کرد و معادل متد boot هم در Eloquent توی Yii متد behaviors هست که در ActiveRecord نوعاً برای مدیریت رفتارها ازش استفاده میشه ولی میشه با متدهای جداگانه هم رفتار تعریف کرد که ساختارش یکم با لاراول فرق داره ولی خیلی کامل و راحته. برای شلوغ نشدن تاپیک (چون رفتارها در ActiveRecord خیلی کامل و جامع هستن تا جایی که کلاس جداگانه دارن)، صرفاً مطالعه دو لینک زیر رو برای علاقمندان توصیه میکنم:
    Behaviors of CModel
    CActiveRecordBehavior
    CModelBehavior
    CBehavior
    ضمناً به علاقمندان حتماً مطالعه صفحات 226 تا 231 کتاب Yii application development cookbook 2nd edition رو توصیه میکنم. توی این بخش، بصورت عملی پیاده سازی Soft Delete رو (مشابه چیزی که توی لاراول هست) با کمک تعریف رفتارهای خاص برای کلاس مدل، توضیح داده.

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

    نقل قول: Yii vs Laravel

    خوب تقریبا eloquent تمام شد
    مواردی دیگه مثل mass assignment و hidden properties و ... وجود داره که ازش میگذرم

    بریم سراغ احراز هویت و ...

    در لاراول کلاس احراز هویت به صورت اوتوماتیک به مدل User متصل میشه و به شکل زیر عملیات احراز هویت رو انجام میده
    و به صورت Auth::user به مدل و کلاس احراز هویت، یکجا دسترسی دارم

    $credential = array('username' => $username, 'password' => $password);

    if (Auth::attempt($credential))
    {
    // user logged
    }


    گرفتن نام کاربر

    Auth::user()->name


    چک کردن ورود یوزر

    if (Auth::check())
    {
    // The user is logged in...
    }


    ورود کاربر به صورت remember me
    (سشن زمان دار، در صورت بسته شدن مرورگر، کاربر خارج نمیشود)

    if (Auth::attempt($credential, true))
    {
    // user logged
    }


    چک کردن ورود کاربر به روش remember

    if (Auth::viaRemember())
    {
    //
    }


    احراز هویت با id

    Auth::loginUsingId(1);


    احراز هویت با مدل

    $user = User::find(1);
    Auth::login($user);


    تصدیق کاربر بدون لاگین

    if (Auth::validate($credentials))
    {
    //
    }


    لاگین کاربر فقط برای request فعلی

    if (Auth::once($credentials))
    {
    //
    }


    خروج کاربر

    Auth::logout();

صفحه 5 از 9 اولاول ... 34567 ... آخرآخر

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

  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 عصر

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

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

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