حسین حصاری
5 سال پیش توسط حسین حصاری مطرح شد
4 پاسخ

تفاوت کوری ها

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

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


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
2

@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
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
1

سلام
@hoseinhesari.ir

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
2

@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 هست.


حسین حصاری
@hoseinhesari.ir 5 سال پیش مطرح شد
0

@ali.bayat

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

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

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

@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();

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام