راکت
حل شده

تفاوت کوری ها

4 پاسخ

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

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

ثبت پرسش جدید

پاسخ‌ها

4
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

بهترین پاسخ

@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
@Alimotreb

تخصص: کانفیگ سرور و برنامه نویس

سلام
@hoseinhesari.ir

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

حسین حصاری
حسین حصاری
@hoseinhesari.ir

@ali.bayat

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

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

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

شاید پاسخ شما همین‌جا باشد

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

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

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