تفاوت کوری ها

- 3 هفته پیش
توسط علی بیات آپدیت شد
حسین حصاری ( 1045 تجربه )
3 هفته پیش

سلام
برای کوری زدن کدوم روش بهتر و استاندارد تره
1) DB::table()->where

2) User::all
چه تفاوتی با هم دارند؟

بهترین پاسخ انتخاب شده توسط حسین حصاری
علی بیات
3 هفته پیش

@hoseinhesari.ir

در واقع User::all و متدهایی مثل اون از Query Builder لاراول استفاده میکنند. و در کنارش کلاس دیگه‌ای هم داریم به نام Eloquent Builder... کوئری‌هایی که با الکوئنت بوجود میاریم از متدهای این ۲ کلاس استفاده میکنند.

حالت زیر رو در نظر بگیرید:
فرض کنید شما میخواهید کاربری رو که id اون 1 هست رو پیدا کنید. ۲ حالت وجود داره. یا باید با Query Builder لاراول این کارو انجام بدید و یا با (Eloquent) Laravel ORM
متد Query Builder:

$user = new App\User();

$firstUser = $user->newQuery()->where('id', '=', 1)->first();

متد Eloquent:

$firstUser = App\User::find(1);

در واقع Eloquent متد کوتاه‌تر برای استفاده از Query Builder هست.

Alimotreb ( 15557 تجربه )
3 هفته پیش

سلام
@hoseinhesari.ir

بستگی داره چه کوئری باشه
ولی خب استفاده از eloquent ها پیشنهاد میشه همه جا
همون گزینه 2
هم بهینه تره
هم کدش کمتره
هم زمان پردازشش رو گفتن کمتر و بهتر هست

علی بیات ( 41372 تجربه )
3 هفته پیش

@hoseinhesari.ir

در واقع User::all و متدهایی مثل اون از Query Builder لاراول استفاده میکنند. و در کنارش کلاس دیگه‌ای هم داریم به نام Eloquent Builder... کوئری‌هایی که با الکوئنت بوجود میاریم از متدهای این ۲ کلاس استفاده میکنند.

حالت زیر رو در نظر بگیرید:
فرض کنید شما میخواهید کاربری رو که id اون 1 هست رو پیدا کنید. ۲ حالت وجود داره. یا باید با Query Builder لاراول این کارو انجام بدید و یا با (Eloquent) Laravel ORM
متد Query Builder:

$user = new App\User();

$firstUser = $user->newQuery()->where('id', '=', 1)->first();

متد Eloquent:

$firstUser = App\User::find(1);

در واقع Eloquent متد کوتاه‌تر برای استفاده از Query Builder هست.

حسین حصاری ( 1045 تجربه )
3 هفته پیش

@ali.bayat

اینجوری که متوجه شدم در Query Builder برای ایجاد کوئری های دلخواه و مدنظر ما می باشد
ولی Eloquent ظرفیتش محدوده شامل همون رابطه های خود ساختش که فقط میتونیم از اونا استفاده کنیم
درسته به نظرتون یا برای Eloquent ها هم میشه کوری های دلخواه نوشت ؟

و اینکه Eloquent ها رو بهتره به این صورت

"
()new App\User
یا مستقیما ()User::all
نوشت؟
"

علی بیات ( 41372 تجربه )
3 هفته پیش

@hoseinhesari.ir

روش دوم ساده‌تره.
بله٬ خیلی راحت می‌تونید کوئری‌های Custom رو بصورت Local Scope به مدل هاتون اضافه کنید.

کد داخل مدل بشکل زیر:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    public function scopePopular($query)
    {
        return $query->where('votes', '>', 100);
    }

    public function scopeActive($query)
    {
        return $query->where('active', 1);
    }
}

و برای استفاده هم:

$users = App\User::popular()->active()->orderBy('created_at')->get();
برای ارسال پاسخ باید وارد سایت شوید