| کانال توسعه‌دهندگان لاراول |
1.61K subscribers
54 photos
114 links
⭕️ کانال توسعه‌دهندگان لاراول دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
Flux -the UI Library for Livewire

** توی لاراکان یه ui library هم برای لایووایر معرفی شد که خیلی چیزای باحالی داره و درکل چیز خفنیه
ولی اینجا نکته مهمه که ایا در rtl و زبان فارسی هم به همین قدرت هست یا نه :/

یک لایبرری دیگری وجود داشت به اسم maryUI این تشکیل شده بود از daisyUI و Tailwind css و Livewire ولی در زبان های rtl واقعا اذیت کننده بود.

موارد خیلی عجیب غریبی نداره که بخوام لیست کنم و بگم ولی خب یه لایبرری هست که باحاله کارمون رو راحت تر میکنه و....

برای دیدن فیچرهاش و... میتونید ویدیو لاراکان رو ببینید

لینک ویدیو:
https://www.youtube.com/watch?v=31pBMi0UdYE

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
👍51🔥1
⚜️ دوره لاراول - قسمت یازدهم
📚 ویوها - Layouts & Forms

خلاصه :
توی این ویدیو به بحث Layouts و فرم ها در سیستم بلید پرداختیم
در ویدیو های بعدی به الکونت و کار با دیتابیس میپردازیم.

🎞 لینک ویدیو:
https://youtu.be/AMZK8y3_pqk

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
7👍2🔥1
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت اول


برای ایجاد یک مدل، کافی است دستور زیر اجرا کنید:
php artisan make:model User


این دستور یک فایل جدید به نام User.php در پوشه app/Models ایجاد می‌کند که به شکل زیر است:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
//
}


هر مدل در لاراول به صورت پیش‌فرض به یک جدول پایگاه داده مرتبط است. لاراول با استفاده از قواعد نامگذاری، نام جدول را از نام مدل استخراج می‌کند. به طور مثال، مدل User به جدول users متصل می‌شود.
نام مدل باید به صورت مفرد (User) و نام جدول به صورت جمع (users) باشد.

اگر نام جدول شما متفاوت باشد، می‌توانید آن را به صورت دستی مشخص کنید:
class User extends Model
{
protected $table = 'table_name';
}


لاراول یک ویژگی امنیتی به نام Mass Assignment Protection دارد که به شما اجازه می‌دهد فیلدهایی که می‌توانند به صورت گروهی پر شوند را مشخص کنید. این کار با استفاده از ویژگی $fillable انجام می‌شود:
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
}


با استفاده از این ویژگی، فقط فیلدهای name، email و password می‌توانند به صورت گروهی پر شوند. این کار مانع از حملات احتمالی امنیتی می‌شود.

از این پس می توانید با استفاده از کلاس User با جدول users ارتباط برقرار کنید.

در این قسمت با متد های اصلی برای عملیات CRUD آشنا می شویم.

1- متد all
متد all تمام رکوردهای یک جدول را برمی‌گرداند. این متد بدون هیچ شرطی، تمامی رکوردها را برمی‌گرداند.

$users = User::all();


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

2- متد find
متد find برای یافتن یک رکورد بر اساس مقدار کلید اصلی (Primary Key) آن استفاده می‌شود. این متد یک رکورد را به عنوان شیء مدل بازمی‌گرداند یا اگر رکوردی پیدا نشود، مقدار null برمی‌گردد.

$user = User::find(1);


این کد کاربری با id برابر با ۱ را از جدول users پیدا می‌کند.

3- متد where
متد where برای اضافه کردن شرط به پرس و جو استفاده می‌شود. این متد یک یا چند شرط را برای محدود کردن نتایج اعمال می‌کند.

$adultUsers = User::where('age', '>', 18)->get();


این کد تمام کاربرانی که سن آن‌ها بالاتر از ۱۸ سال است را برمی‌گرداند.
می‌توان از چندین شرط where پشت سر هم استفاده کرد:
$filteredUsers = User::where('status', 'active')->where('age', '>', 18)->get();


این کد کاربرانی را برمی‌گرداند که هم فعال هستند و هم سن آن‌ها بالاتر از ۱۸ سال است.
نکته: به طور پیشفرض اگر دو پارامتر به متد where داده شود از اپراتور = استفاده می کند، مگر ذکر شود.

4- متد orWhere
متد orWhere برای اضافه کردن شرط‌های OR به پرس و جو استفاده می‌شود. این متد در جایی به کار می‌رود که می‌خواهیم نتایج با یکی از شرط‌ها تطابق داشته باشند.

$users = User::where('status', 'active')->orWhere('age', '>', 18)->get();


این کد کاربرانی را برمی‌گرداند که یا فعال هستند یا سن آن‌ها بالاتر از ۱۸ سال است.

5- متد get
متد get برای بازیابی مجموعه‌ای از رکوردها با شرایط خاص استفاده می‌شود. این متد بعد از استفاده از یک یا چند متد شرطی (مانند where و غیره) به کار می‌رود و نتایج را به صورت یک Collection برمی‌گرداند.

6- متد delete
متد delete برای حذف یک رکورد یا چندین رکورد از پایگاه داده استفاده می‌شود. برای حذف یک رکورد، ابتدا باید آن را پیدا کرده و سپس متد delete را روی آن اجرا کنیم.
$user = User::find(1)->delete();


این کد کاربری با id برابر با ۱ را از جدول users حذف می‌کند.

7- متد update
متد update برای به‌روزرسانی یک یا چند فیلد از یک رکورد استفاده می‌شود.
User::find(1)->update([
"username" => "John Smith"
]);

این کد نام کاربری با id برابر با ۱ را به 'John Smith' تغییر می‌دهد.

متد create:
متد create برای ایجاد یک رکورد جدید در پایگاه داده استفاده می‌شود. این متد به یک آرایه از داده‌ها نیاز دارد که باید با ویژگی‌های $fillable مدل تطابق داشته باشند.
$user = User::create([
'name' => 'Alice Doe',
'email' => 'alice@example.com',
'password' => bcrypt('password123')
]);

این کد یک رکورد جدید با موارد داده شده ایجاد می کند.

در قسمت های بعدی با سایر متد ها آشنا می شویم.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
6👍1🔥1
⚜️ دوره لاراول - قسمت دوازدهم
📚 دیتابیس‌ها - Eloquent ORM

خلاصه :
توی این ویدیو به بحث Eloquent پرداختیم
در ویدیو های بعدی به ادامه الکونت و کار با دیتابیس میپردازیم.

🎞 لینک ویدیو:
https://youtu.be/z-v068bzg0M

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
8👍1🔥1
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت دوم (متدهای ایجاد، ذخیره)


1- متد create
برای ایجاد و ذخیره یک مدل جدید در دیتابیس استفاده می‌شود. این متد یک آرایه از ویژگی‌ها را می‌گیرد و یک رکورد جدید را در دیتابیس ایجاد و ذخیره می‌کند.
$user = User::create([
'name' => 'John',
]);


2- متد firstOrNew
سعی می‌کند یک رکورد مطابق با شرایط مشخص شده را در دیتابیس پیدا کند. اگر پیدا شود، همان مدل را برمی‌گرداند؛ در غیر این صورت، یک مدل جدید ایجاد می‌کند ولی آن را ذخیره نمی‌کند.
$user = User::firstOrNew(['email' => 'example@gmail.com']);
$user->name = 'John';
$user->save();

اگر چنین کاربری وجود داشته باشد، آن را برمی‌گرداند. اگر نه، یک نمونه‌ی جدید ایجاد می‌کند و شما می‌توانید قبل از ذخیره، اطلاعات بیشتری را به آن اضافه کنید.

3- متد firstOrCreate
مشابه firstOrNew است، اما به محض اینکه مدل جدید را ایجاد کرد، بلافاصله آن را در دیتابیس ذخیره می‌کند.
$user = User::firstOrCreate(
['email' => 'example@gmail.com'],
['name' => 'John']
);


4- متد updateOrCreate
یک رکورد را بر اساس شرایط مشخص شده به‌روز رسانی می‌کند و اگر وجود نداشت، یک رکورد جدید ایجاد و ذخیره می‌کند.
$user = User::updateOrCreate(
['email' => 'example@gmail.com'],
['name' => 'John']
);


5- متد save
برای ذخیره کردن یک مدل جدید یا به‌روزرسانی یک مدل موجود در دیتابیس استفاده می‌شود.
$user = new User;
$user->name = 'John';
$user->save();

این کد یک نمونه‌ی جدید از مدل User ایجاد می‌کند، سپس مقادیر فیلدهای name را تنظیم می‌کند و در نهایت آن را در دیتابیس ذخیره می‌کند.

6- متد saveMany
برای ذخیره کردن چندین مدل مرتبط در یک زمان استفاده می‌شود.
$post = Post::find(1);
$comments = [
new Comment(['message' => 'First']),
new Comment(['message' => 'Second']),
];
$post->comments()->saveMany($comments);

برای یک پست چندین کامنت ایجاد و ذخیره می کند (توضیح کامل تر پس از آموزش روابط دیتابیس)

7- متد saveQuietly
مشابه متد save است، با این تفاوت که رویدادهای مدل (events) را تحریک نمی‌کند.

8- متد createMany
برای ایجاد و ذخیره چندین مدل به طور همزمان استفاده می‌شود.
$post = Post::find(1);
$post->comments()->createMany([
['message' => 'First'],
['message' => 'Second']
]);

برای یک پست چندین کامنت ایجاد می کند (توضیح کامل تر پس از آموزش روابط دیتابیس)

9- متد createManyQuietly
مشابه createMany است، اما رویدادهای مدل (events) را تحریک نمی‌کند.

10- متد createQuietly
مشابه create است، اما رویدادهای مدل را تحریک نمی‌کند.

11- متد insert
برای وارد کردن چندین رکورد به طور همزمان در جدول دیتابیس استفاده می‌شود. این متد یک نمونه از مدل را برنمی‌گرداند.
User::insert([
['name' => 'John'],
['name' => 'Jane']
]);


12- متد insertOrIgnore
مانند insert است، اما اگر رکوردها در زمان درج، خطایی ایجاد کنند (مانند تکراری بودن داده‌ها)، این خطاها را نادیده می‌گیرد.

13- متد insertUsing
به شما اجازه می‌دهد داده‌ها را از یک کوئری دیگر درج کنید.
ArchivedUser::insertUsing(['name', 'email'], function ($query) {
$query->select('name', 'email')->from('users')->where('active', 0);
});

این کد کاربران غیر فعال را از جدول users انتخاب کرده و در جدول archived_users درج می‌کند.(توضیح سایر متد ها در قسمت های بعد).

14- متد insertGetId
یک رکورد جدید درج می‌کند و شناسه (ID) آن رکورد را برمی‌گرداند.
User::insertGetId(
['name' => 'John']
);


15- متد upsert
چندین رکورد را درج یا به‌روزرسانی می‌کند. این متد برای شرایطی مناسب است که شما می‌خواهید رکوردهایی که وجود دارند را به‌روزرسانی کنید و رکوردهایی که وجود ندارند را ایجاد کنید.
User::upsert([
['email' => 'john@gmail.com', 'name' => 'John'],
['email' => 'jane@gmail.com', 'name' => 'Jane']
], ['email'], ['name']);

اگر کاربری با همان ایمیل وجود داشته باشد، فقط نامش به‌روزرسانی می‌شود؛ وگرنه رکورد جدیدی ایجاد می‌شود.

16- متد updateOrInsert
این متد شبیه updateOrCreate است، با این تفاوت که مستقیماً با دیتابیس کار می‌کند و مدل را باز نمی‌گرداند.

17- متد fill
برای پر کردن مدل با داده‌های مشخص استفاده می‌شود. این متد مدل را ذخیره نمی‌کند؛ تنها مقادیر فیلدها را تنظیم می‌کند.
$user = new User;
$user->fill(['name' => 'John']);
$user->save();


🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
5👍3🔥2
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت سوم (متدهای ویرایش، حذف)


1- متد update
برای به‌روزرسانی رکوردهای موجود در دیتابیس استفاده می‌شود.
User::where('email', 'example@gmail.com')->update(['name' => 'John']);

این کد فیلد name تمام کاربران با ایمیل مشخص شده را به 'John' تغییر می‌دهد.

2- متد increment
برای افزایش مقدار یک فیلد عددی استفاده می‌شود.
User::where('id', 1)->increment('age', 2);

این کد مقدار فیلد age کاربر با id 1 را به اندازه 2 افزایش می‌دهد.

3- متد decrement
برای کاهش مقدار یک فیلد عددی استفاده می‌شود.
User::where('id', 1)->decrement('age', 2);

این کد مقدار فیلد age کاربر با id 1 را به اندازه 2 کاهش می‌دهد.

4- متد incrementEach
برای افزایش مقدار یک فیلد عددی در چندین رکورد به طور همزمان استفاده می‌شود.
User::whereIn('id', [1, 2, 3])->incrementEach('credits', 5);

این کد مقدار فیلد credits را برای کاربران با شناسه‌های 1، 2 و 3 به اندازه 5 افزایش می‌دهد.

5- متد decrementEach
برای کاهش مقدار یک فیلد عددی در چندین رکورد به طور همزمان استفاده می‌شود.
User::whereIn('id', [1, 2, 3])->decrementEach('credits', 5);

این کد مقدار فیلد credits را برای کاربران با شناسه‌های 1، 2 و 3 به اندازه 5 کاهش می‌دهد.

6- متد delete
برای حذف رکوردهای موجود در دیتابیس استفاده می‌شود.
User::where('id', 1)->delete();

این کد کاربر با id 1 را از دیتابیس حذف می‌کند.

7- متد truncate
برای حذف تمام رکوردها از یک جدول و بازنشانی auto-increment استفاده می‌شود.
User::truncate();

این کد تمام کاربران را از جدول users حذف می‌کند و شناسه خودکار را به مقدار اولیه بازنشانی می‌کند.

8- متد deleteQuietly
مشابه delete است، اما رویدادهای مدل را تحریک نمی‌کند.

9- متد forceDelete
برای حذف دائم رکوردها از دیتابیس استفاده می‌شود، حتی اگر از ویژگی Soft Delete استفاده شود.
User::find(1)->forceDelete();

این کد کاربر با id 1 را به طور دائم از دیتابیس حذف می‌کند.

10- متد forceDeleteQuietly
مشابه forceDelete است، اما رویدادهای مدل را تحریک نمی‌کند.

11- متد destroy
برای حذف یک یا چند رکورد با شناسه‌های مشخص استفاده می‌شود.
User::destroy([1, 2, 3]);

این کد کاربران با شناسه‌های 1، 2 و 3 را از دیتابیس حذف می‌کند.

12- متد forceDestroy
برای حذف دائم یک یا چند رکورد حتی با استفاده از ویژگی Soft Delete استفاده می‌شود.
User::forceDestroy([1, 2, 3]);

این کد کاربران با شناسه‌های 1، 2 و 3 را به طور دائم از دیتابیس حذف می‌کند، حتی اگر در حالت Soft Delete باشند.

13- متد restore
برای بازیابی رکوردهایی که Soft Delete شده‌اند، استفاده می‌شود.
User::where('id', 1)->restore();

این کد کاربر با id 1 را که Soft Delete شده بود، بازیابی می‌کند.

14- متد restoreQuietly
مشابه restore است، اما رویدادهای مدل را تحریک نمی‌کند.

15- متد replicate
برای ایجاد یک کپی از یک مدل موجود استفاده می‌شود.
$user = User::find(1);
$newUser = $user->replicate();
$newUser->save();

این کد یک کپی از کاربر با id 1 ایجاد کرده و آن را به عنوان یک رکورد جدید ذخیره می‌کند.

16- متد withTrashed
به شما اجازه می‌دهد رکوردهایی که Soft Delete شده اند را نیز در نتایج جستجو بازگردانید.
$users = User::withTrashed()->where('name', 'John')->get();

این کد تمام کاربران با نام 'John' را برمی‌گرداند، حتی آنهایی که Soft Delete شده‌اند.

17- متد onlyTrashed
به شما اجازه می‌دهد تنها رکوردهایی که Soft Delete شده اند را در نتایج جستجو بازگردانید.
$users = User::onlyTrashed()->where('name', 'John')->get();

این کد تمام کاربران با نام 'John' که Soft Delete شده‌اند را برمی‌گرداند.

18- متد trashed
بررسی می‌کند که آیا یک رکورد خاص Soft Delete شده است یا خیر.
$user = User::find(1);
if ($user->trashed()) {
//
}

این کد بررسی می‌کند که آیا کاربر با id برابر 1 Soft Delete شده است یا خیر و اگر بله، کدی را اجرا می‌کند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍82🔥1
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت چهارم (متدهای بازیابی)


1- متد get
برای بازیابی مجموعه‌ای از رکوردها از دیتابیس استفاده می‌شود.
$users = User::where('status', 'active')->get();


2- متد first
اولین رکورد مطابق با شرایط مشخص شده را بازیابی می‌کند.
$user = User::where('status', 'active')->first();


3- متد firstOrFail
اولین رکورد مطابق با شرایط را بازیابی می‌کند؛ اگر رکوردی یافت نشود، یک استثنا برگشت داده می‌شود.
$user = User::where('status', 'active')->firstOrFail();


4- متد value
برای بازیابی مقدار یک فیلد خاص از اولین رکورد مطابق با شرایط استفاده می‌شود.
$email = User::where('name', 'John')->value('email');

این کد مقدار فیلد email اولین کاربری که نام آن 'John' باشد را برمی‌گرداند.

5- متد find
برای بازیابی رکوردی با شناسه (ID) مشخص استفاده می‌شود.
$user = User::find(1);


6- متد pluck
برای بازیابی مقادیر یک ستون خاص از تمام رکوردهای مطابق استفاده می‌شود.
$emails = User::where('status', 'active')->pluck('email');

این کد تمامی ایمیل‌های کاربران با وضعیت 'active' را به صورت آرایه‌ای از مقادیر برمی‌گرداند.

7- متد select
برای انتخاب ستون‌های خاص از جدول استفاده می‌شود.
$users = User::select('name', 'email')->get();

این کد فقط نام و ایمیل تمام کاربران را از دیتابیس بازیابی می‌کند.

8- متد distinct
برای انتخاب مقادیر منحصر به فرد (یونیک) از یک ستون خاص استفاده می‌شود.
$names = User::select('name')->distinct()->get();

این کد تمامی نام‌های منحصر به فرد کاربران را از دیتابیس بازیابی می‌کند.

9- متد addSelect
برای اضافه کردن ستون‌های بیشتر به یک کوئری select استفاده می‌شود.
$users = User::select('name')->addSelect('email')->get();

این کد ابتدا ستون name را انتخاب می‌کند و سپس ستون email را به کوئری اضافه می‌کند.

10- متد selectRaw
برای نوشتن کوئری‌های خام SQL استفاده می‌شود.
$users = User::selectRaw('name, COUNT(*) as count')->groupBy('name')->get();

این کد نام کاربران را به همراه تعداد رکوردهای مربوط به هر نام، با استفاده از کوئری خام SQL، بازیابی می‌کند.

11- متد firstWhere
اولین رکورد مطابق با شرایط مشخص شده را بازیابی می‌کند.
$user = User::firstWhere('name', 'John');

این کد اولین کاربری که نام آن 'John' باشد را بازیابی می‌کند.

12- متد findOr
رکوردی با شناسه مشخص را بازیابی می‌کند یا یک عمل جایگزین را اجرا می‌کند اگر یافت نشد.
$user = User::findOr(1, function () {
return new User(['name' => 'Default User']);
});

این کد کاربری با شناسه 1 را پیدا می‌کند. اگر وجود نداشته باشد، یک کاربر جدید با نام 'Default User' ایجاد می‌کند.

13- متد firstOr
اولین رکورد مطابق با شرایط را بازیابی می‌کند یا یک عمل جایگزین را اجرا می‌کند اگر رکورد یافت نشد.
$user = User::where('name', 'John')->firstOr(function () {
return new User(['name' => 'Default User']);
});

این کد اولین کاربری که نام آن 'John' باشد را بازیابی می‌کند. اگر وجود نداشته باشد، یک کاربر جدید با نام 'Default User' ایجاد می‌کند.

14- متد findOrFail
رکوردی با شناسه مشخص را بازیابی می‌کند. اگر وجود نداشته باشد، یک استثنا برگشت داده می‌شود.
$user = User::findOrFail(1);

این کد کاربری با شناسه 1 را بازیابی می‌کند. اگر وجود نداشته باشد، یک استثنا برگشت داده می‌شود.

15- متد findOrNew
رکوردی با شناسه مشخص را بازیابی می‌کند یا یک مدل جدید ایجاد می‌کند اگر رکورد یافت نشد.
$user = User::findOrNew(1);

این کد کاربری با شناسه 1 را بازیابی می‌کند. اگر کاربری با این شناسه وجود نداشته باشد، یک نمونه جدید از مدل User ایجاد می‌کند.

16- متد firstOrCreate
تلاش می‌کند اولین رکورد مطابق با شرایط را پیدا کند؛ اگر یافت نشد، یک رکورد جدید ایجاد و در دیتابیس ذخیره می‌کند.
$user = User::firstOrCreate(
['email' => 'test@gmail.com'],
['name' => 'John']
);

این کد تلاش می‌کند تا اولین کاربر با ایمیل 'test@gmail.com' را پیدا کند. اگر وجود نداشت، یک کاربر جدید با ادغام دو ورودی ایجاد می‌کند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍31
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت پنجم (متدهای شرطی - 1)


1- متد where
رای اعمال یک شرط بر روی کوئری استفاده می‌شود.
$users = User::where('status', 'active')->where('age',  '>', '18')->get();

این کد تمام کاربران با وضعیت 'active' و سن بزرگتر از 18 را بازیابی می‌کند.

2- متد orWhere
برای اعمال یک شرط OR بر روی کوئری استفاده می‌شود.
$users = User::where('status', 'active')->orWhere('age', '>', 18)->get();

این کد تمام کاربران با وضعیت 'active' یا کاربرانی که سن آن‌ها بیشتر از ۱۸ است را بازیابی می‌کند.

3- متد whereNot
برای اعمال شرطی که مخالف یک شرط مشخص است، استفاده می‌شود.
$users = User::whereNot('status', 'inactive')->get();

ین کد تمام کاربرانی که وضعیت آن‌ها 'inactive' نیست را بازیابی می‌کند.

4- متد orWhereNot
برای اعمال یک شرط OR که مخالف یک شرط مشخص است، استفاده می‌شود.
$users = User::where('age', '<', 30)->orWhereNot('status', 'inactive')->get();

این کد تمام کاربرانی که سن آن‌ها کمتر از ۳۰ است یا وضعیت آن‌ها 'inactive' نیست را بازیابی می‌کند.

5- متد whereRaw
به شما اجازه می‌دهد که یک شرط خام SQL را به کوئری اضافه کنید.
$users = User::whereRaw('age > ? AND status = ?', [18, 'active'])->get();

این کد تمام کاربران با سن بیشتر از ۱۸ و وضعیت 'active' را بازیابی می‌کند.

6- متد orWhereRaw
برای افزودن شرط OR به یک کوئری با استفاده از SQL خام استفاده می‌شود.
$users = User::where('status', 'active')->orWhereRaw('age > ?', [18])->get();

این کد تمام کاربران با وضعیت 'active' یا سن بیشتر از ۱۸ را بازیابی می‌کند.

7- متد whereColumn
برای اعمال شرطی که دو ستون را با یکدیگر مقایسه می‌کند، استفاده می‌شود.
$users = User::whereColumn('created_at', '>', 'updated_at')->get();

این کد تمام کاربرانی را که تاریخ ایجاد آن‌ها جدیدتر از تاریخ به‌روزرسانی‌شان است، بازیابی می‌کند.

8- متد whereNull
برای جستجوی رکوردهایی که مقدار مشخصی در آن‌ها NULL است، استفاده می‌شود.
$users = User::whereNull('deleted_at')->get();

این کد تمام کاربرانی که فیلد deleted_at آن‌ها مقدار NULL دارد (حذف نشده‌اند)، بازیابی می‌کند.

9- متد whereNotNull
رای جستجوی رکوردهایی که مقدار مشخصی در آن‌ها NULL نیست، استفاده می‌شود.
$users = User::whereNotNull('email')->get();

این کد تمام کاربرانی که فیلد email آن‌ها مقدار NULL ندارد را بازیابی می‌کند.

10- متد whereDate
برای فیلتر کردن رکوردها بر اساس تاریخ استفاده می‌شود.
$users = User::whereDate('created_at', '2024-09-12')->get();


11- متد whereMonth
برای فیلتر کردن رکوردها بر اساس ماه استفاده می‌شود.
$users = User::whereMonth('created_at', '09')->get();


12- متد whereDay
برای فیلتر کردن رکوردها بر اساس روز استفاده می‌شود.
$users = User::whereDay('created_at', '12')->get();


13- متد whereYear
برای فیلتر کردن رکوردها بر اساس سال استفاده می‌شود.
$users = User::whereYear('created_at', '2024')->get();


14- متد whereTime
برای فیلتر کردن رکوردها بر اساس زمان استفاده می‌شود.
$users = User::whereTime('created_at', '14:30:00')->get();


15- متد whereAny
برای فیلتر کردن رکوردها با هر یک از شرایط مشخص استفاده می‌شود.
$users = User::whereAny([
['status', 'active'],
['age', '>', 18]
])->get();

این کد تمام کاربرانی را که وضعیت آن‌ها 'active' است یا سن آن‌ها بیشتر از ۱۸ است، بازیابی می‌کند.

16- متد whereAll
برای فیلتر کردن رکوردها با تمام شرایط مشخص استفاده می‌شود.
$users = User::whereAll([
['status', 'active'],
['age', '>', 18]
])->get();

این کد تمام کاربرانی را که وضعیت آن‌ها 'active' و سن آن‌ها بیشتر از ۱۸ است، بازیابی می‌کند.

17- متد whereNone
برای فیلتر کردن رکوردهایی که هیچ‌کدام از شرایط مشخص را ندارند، استفاده می‌شود.
$users = User::whereNone([
['status', 'inactive'],
['age', '<', 18]
])->get();

این کد تمام کاربرانی را که وضعیت آن‌ها 'inactive' نیست و سن آن‌ها کمتر از ۱۸ نیست، بازیابی می‌کند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
🔥53👍3
⚜️ دوره لاراول - قسمت سیزدهم
📚 دیتابیس - Migrations

خلاصه :
توی این ویدیو به بحث Migrations و بیشتر کار کردن با Eloquent پرداختیم
در ویدیو های بعدی به relations میپردازیم.

🎞 لینک ویدیو:
https://youtu.be/WDOfH2PkBpg

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
👍61🔥1
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت پنجم (متدهای شرطی - 2)


1- متد whereBetween
برای فیلتر کردن رکوردهایی که مقدار یک ستون بین دو مقدار مشخص است، استفاده می‌شود.
$users = User::whereBetween('age', [18, 30])->get();

این کد تمام کاربرانی را که سن آن‌ها بین ۱۸ تا ۳۰ است، بازیابی می‌کند.

2- متد whereNotBetween
برای فیلتر کردن رکوردهایی که مقدار یک ستون خارج از محدوده دو مقدار مشخص است، استفاده می‌شود.
$users = User::whereNotBetween('age', [18, 30])->get();


3- متد whereBetweenColumns
برای فیلتر کردن رکوردهایی که مقدار یک ستون بین مقادیر دو ستون دیگر است، استفاده می‌شود.
$users = User::whereBetweenColumns('salary', ['min_salary', 'max_salary'])->get();

این کد تمام کاربرانی را که مقدار ستون salary آن‌ها بین مقادیر ستون‌های min_salary و max_salary است، بازیابی می‌کند.

4- متد whereNotBetweenColumns
برای فیلتر کردن رکوردهایی که مقدار یک ستون خارج از مقادیر دو ستون دیگر است، استفاده می‌شود.
$users = User::whereNotBetweenColumns('salary', ['min_salary', 'max_salary'])->get();


5- متد whereIn
برای فیلتر کردن رکوردهایی که مقدار ستون مشخص شده در یک لیست از مقادیر است، استفاده می‌شود.
$users = User::whereIn('id', [1, 2, 3])->get();

این کد تمام کاربرانی که شناسه آن‌ها یکی از ۱، ۲ یا ۳ است، بازیابی می‌کند.

6- متد whereNotIn
برای فیلتر کردن رکوردهایی که مقدار ستون مشخص شده در لیست مقادیر معین نیست، استفاده می‌شود.
$users = User::whereNotIn('id', [1, 2, 3])->get();


7- متد whereIntegerInRaw
مشابه whereIn است، اما از کوئری خام SQL برای مقایسه استفاده می‌کند و به طور خاص برای لیست های بزرگ اعداد مناسب است.
$users = User::whereIntegerInRaw('id', [1, 2, 3])->get();

این کد از SQL خام برای بازیابی تمام کاربرانی که شناسه آن‌ها ۱، ۲ یا ۳ است استفاده می‌کند.

8- متد whereIntegerNotInRaw
مشابه whereNotIn است، اما از کوئری خام SQL برای مقایسه استفاده می‌کند و به طور خاص برای لیست های بزرگ اعداد مناسب است.
$users = User::whereIntegerNotInRaw('id', [1, 2, 3])->get();


9- متد whereFullText
برای جستجوی تمام متن (full-text search) در ستون‌های خاص استفاده می‌شود. این متد در جداولی که از فیلدهای full-text پشتیبانی می‌کنند، کاربرد دارد.
$posts = Post::whereFullText('content', 'Laravel')->get();

این کد تمام پست‌هایی را که محتوای آن‌ها شامل کلمه 'Laravel' است، بازیابی می‌کند.

10- متد orWhereFullText
مشابه whereFullText است، اما برای افزودن شرط OR در جستجوی تمام متن استفاده می‌شود.
$posts = Post::where('status', 'published')->orWhereFullText('content', 'Laravel')->get();


11- متد whereJsonContains
برای جستجو در فیلدهای JSON استفاده می‌شود و رکوردهایی را که شامل مقدار مشخصی در فیلد JSON هستند، بازیابی می‌کند.
$users = User::whereJsonContains('options->languages', 'en')->get();

این کد تمام کاربرانی را که فیلد options->languages آن‌ها شامل مقدار 'en' است، بازیابی می‌کند.

12- متد whereJsonLength
برای بررسی طول یک فیلد JSON استفاده می‌شود.
$users = User::whereJsonLength('options->languages', 2)->get();

این کد تمام کاربرانی را که تعداد مقادیر موجود در فیلد options->languages آن‌ها برابر با ۲ است، بازیابی می‌کند.

13- متد whereLike
برای جستجوی رشته‌ای با استفاده از الگوی LIKE استفاده می‌شود.
$users = User::whereLike('name', 'John%')->get();

این کد تمام کاربرانی که نام آن‌ها با 'John' شروع می‌شود را بازیابی می‌کند.

14- متد orWhereLike
مشابه whereLike است، اما برای افزودن شرط OR در جستجوی رشته‌ای استفاده می‌شود.
$users = User::where('status', 'active')->orWhereLike('name', 'John%')->get();


15- متد whereNotLike
برای جستجوی رشته‌ای که با یک الگوی LIKE خاص تطابق نداشته باشد، استفاده می‌شود.
$users = User::whereNotLike('name', 'John%')->get();


16- متد orWhereNotLike
مشابه whereNotLike است، اما برای افزودن شرط OR در جستجوی رشته‌ای که با الگوی LIKE خاص تطابق ندارد، استفاده می‌شود.
$users = User::where('status', 'inactive')->orWhereNotLike('name', 'John%')->get();


🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍52🔥1
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت ششم (متدهای شرطی - 3)


1- متد whereExists
برای جستجوی رکوردهایی که وجود یک subquery خاص را تأیید می‌کند، استفاده می‌شود.
$users = User::whereExists(function ($query) {
$query->from('orders')
->whereColumn('orders.user_id', 'users.id');
})->get();

این کد تمام کاربرانی را که یک order در جدول orders با user_id مرتبط به آن‌ها وجود دارد، بازیابی می‌کند.

2- متد whereNotExists
مشابه whereExists است، اما برای جستجوی رکوردهایی استفاده می‌شود که subquery آن‌ها نتیجه‌ای ندارد.
$users = User::whereNotExists(function ($query) {
$query->from('orders')
->whereColumn('orders.user_id', 'users.id');
})->get();


نکته: متدهای پیش رو برای کار با روابط است که در قسمت های بعدی مفصل به آنها پرداخته می شود.

3- متد doesntHave
برای جستجوی رکوردهایی استفاده می‌شود که هیچ رابطه‌ای با یک رابطه مشخص ندارند.
$users = User::doesntHave('posts')->get();

این کد تمام کاربرانی را که هیچ پستی (posts) ندارند بازیابی می‌کند.

4- متد whereDoesntHave
مشابه doesntHave است، اما به شما اجازه می‌دهد که شرط‌های بیشتری را به کوئری اضافه کنید.
$users = User::whereDoesntHave('posts', function ($query) {
$query->where('title', 'like', '%Laravel%');
})->get();

این کد تمام کاربرانی را که هیچ پستی با عنوان شامل کلمه 'Laravel' ندارند، بازیابی می‌کند.

5- متد orWhereDoesntHave
مشابه whereDoesntHave است، اما برای افزودن شرط OR در جستجوی رکوردهایی که هیچ رابطه‌ای با یک رابطه مشخص ندارند، استفاده می‌شود.
$users = User::where('status', 'active')->orWhereDoesntHave('posts')->get();


6- متد whereHas
برای جستجوی رکوردهایی که رابطه‌ای با یک رابطه مشخص دارند و همچنین شرط‌های اضافی روی آن رابطه اعمال شده است، استفاده می‌شود.
$users = User::whereHas('posts', function ($query) {
$query->where('title', 'like', '%Laravel%');
})->get();

این کد تمام کاربرانی را که حداقل یک پستی با عنوان شامل کلمه 'Laravel' دارند، بازیابی می‌کند.

7- متد orWhereHas
مشابه whereHas است، اما برای افزودن شرط OR به جستجوی رکوردهایی که رابطه‌ای با یک رابطه مشخص دارند، استفاده می‌شود.
$users = User::where('status', 'inactive')->orWhereHas('posts', function ($query) {
$query->where('title', 'like', '%Laravel%');
})->get();


8- متد whereRelation
برای اعمال شرطی روی یک رابطه خاص استفاده می‌شود.
$users = User::whereRelation('posts', 'title', 'like', '%Laravel%')->get();

این کد تمام کاربرانی را که حداقل یک پستی با عنوان شامل کلمه 'Laravel' دارند، بازیابی می‌کند.

9- متد orWhereRelation
مشابه whereRelation است، اما برای افزودن شرط OR استفاده می‌شود.
$users = User::where('status', 'inactive')->orWhereRelation('posts', 'title', 'like', '%Laravel%')->get();


10- متد whereMorphRelation
برای اعمال شرطی روی یک رابطه چندشکلی (morph) خاص استفاده می‌شود.
$comments = Comment::whereMorphRelation('commentable', 'posts', 'title', 'like', '%Laravel%')->get();

این کد تمام نظراتی را که مربوط به پست‌هایی با عنوان شامل کلمه 'Laravel' هستند، بازیابی می‌کند.

11- متد orWhereMorphRelation
مشابه whereMorphRelation است، اما برای افزودن شرط OR استفاده می‌شود.
$comments = Comment::where('status', 'pending')->orWhereMorphRelation('commentable', 'posts', 'title', 'like', '%Laravel%')->get();


12- متد whereHasMorph
برای جستجوی رکوردهایی که رابطه‌ای چندشکلی (morph) با یک یا چند نوع مشخص دارند و شرایط اضافی بر آن‌ها اعمال شده است، استفاده می‌شود.
$comments = Comment::whereHasMorph('commentable', ['posts', 'videos'], function ($query) {
$query->where('title', 'like', '%Laravel%');
})->get();

این کد تمام نظراتی را که مربوط به پست‌ها یا ویدئوهایی با عنوان شامل کلمه 'Laravel' هستند، بازیابی می‌کند.

13- متد whereDoesntHaveMorph
برای جستجوی رکوردهایی که هیچ رابطه‌ای چندشکلی (morph) با یک یا چند نوع مشخص ندارند، استفاده می‌شود.
$comments = Comment::whereDoesntHaveMorph('commentable', ['posts', 'videos'])->get();

این کد تمام نظراتی را که مربوط به هیچ پست یا ویدئویی نیستند، بازیابی می‌کند.

14- متد whereBelongsTo
برای جستجوی رکوردهایی که به رکورد دیگری تعلق دارند، استفاده می‌شود.
$posts = Post::whereBelongsTo($user)->get();

این کد تمام پست‌هایی را که به کاربر مشخص شده تعلق دارند، بازیابی می‌کند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
4👍4🔥1
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت هفتم (متدهای مرتب سازی و محدود سازی)


1- متد orderBy
برای مرتب‌سازی نتایج بر اساس یک ستون به صورت صعودی یا نزولی استفاده می‌شود. به صورت پیش‌فرض، مرتب‌سازی صعودی (از کوچک به بزرگ) انجام می‌شود.
$users = User::orderBy('name', 'asc')->get();


2- متد orderByDesc
برای مرتب‌سازی نتایج بر اساس یک ستون به صورت نزولی استفاده می‌شود.
$users = User::orderByDesc('created_at')->get();


3- متد orderByRaw
برای نوشتن کوئری‌های خام SQL برای مرتب‌سازی استفاده می‌شود.
$users = User::orderByRaw('LENGTH(name) DESC')->get();


4- متد latest
برای مرتب‌سازی بر اساس جدیدترین رکوردها (بر اساس فیلد created_at) استفاده می‌شود. به صورت پیش‌فرض، مرتب‌سازی نزولی است.
$posts = Post::latest()->get();


5- متد oldest
برای مرتب‌سازی بر اساس قدیمی‌ترین رکوردها (بر اساس فیلد created_at) استفاده می‌شود.
$posts = Post::oldest()->get();


6- متد inRandomOrder
برای مرتب‌سازی نتایج به صورت تصادفی استفاده می‌شود.
$users = User::inRandomOrder()->get();

این کد تمام کاربران را به صورت تصادفی مرتب و بازیابی می‌کند.

7- متد reorder
برای پاک کردن هرگونه مرتب‌سازی قبلی و اعمال یک مرتب‌سازی جدید استفاده می‌شود.
$users = User::orderBy('name')->reorder('email', 'desc')->get();

در ابتدا، کاربران بر اساس نام مرتب می‌شوند، اما با استفاده از reorder مرتب‌سازی قبلی پاک می‌شود و کاربران بر اساس ایمیل به صورت نزولی مرتب می‌شوند.

8- متد count
برای شمارش تعداد رکوردها در یک مجموعه استفاده می‌شود.
$userCount = User::count();


9- متد max
برای یافتن بیشترین مقدار از یک ستون خاص استفاده می‌شود.
$maxAge = User::max('age');


10- متد min
برای یافتن کمترین مقدار از یک ستون خاص استفاده می‌شود.
$minAge = User::min('age');


11- متد avg
برای محاسبه میانگین مقدار یک ستون خاص استفاده می‌شود.
$averageAge = User::avg('age');


12- متد sum
برای محاسبه مجموع مقادیر یک ستون خاص استفاده می‌شود.
$totalSalary = User::sum('salary');


13- متد limit
برای محدود کردن تعداد رکوردهایی که از دیتابیس بازیابی می‌شوند، استفاده می‌شود.
$users = User::limit(10)->get()


14- متد having
برای فیلتر کردن نتایج بر اساس شرطی که بر روی ستون‌های جمع‌آوری شده (مثل COUNT, SUM, AVG) اعمال می‌شود، استفاده می‌شود.
$users = User::select('status', DB::raw('COUNT(*) as user_count'))
->groupBy('status')
->having('user_count', '>', 5)
->get();

این کد تمام وضعیت‌های کاربرانی که بیش از ۵ کاربر دارند را بازیابی می‌کند. (سایر متد های موجود در مثال در قسمت های بعدی بررسی می شوند.)

15- متد havingBetween
برای فیلتر کردن نتایج با استفاده از محدوده‌ای بین دو مقدار روی ستون‌های جمع‌آوری شده استفاده می‌شود.
$users = User::select('status', DB::raw('COUNT(*) as user_count'))
->groupBy('status')
->havingBetween('user_count', [5, 10])
->get();

این کد تمام وضعیت‌های کاربرانی را که تعدادشان بین ۵ تا ۱۰ نفر است، بازیابی می‌کند.

16- متد take
برای محدود کردن تعداد رکوردهای بازیابی شده استفاده می‌شود. take مشابه limit است.
$users = User::take(5)->get();


17- متد skip
برای نادیده گرفتن تعدادی رکورد اول استفاده می‌شود.
$users = User::skip(10)->take(5)->get();

این کد بعد از نادیده گرفتن ۱۰ رکورد اول، ۵ کاربر بعدی را بازیابی می‌کند.

18- متد offset
برای نادیده گرفتن تعداد مشخصی از رکوردهای اول استفاده می‌شود و در ترکیب با limit معمولاً استفاده می‌شود.
$users = User::offset(10)->limit(5)->get();

این کد بعد از نادیده گرفتن ۱۰ رکورد اول، ۵ کاربر بعدی را بازیابی می‌کند.

19 متد when
برای اعمال شرط به کوئری در صورت وجود شرایط خاصی استفاده می‌شود.
$users = User::when(request('status'), function ($query, $status) {
return $query->where('status', $status);
})->get();

این کد بررسی می‌کند که آیا درخواستی برای status وجود دارد؛ اگر وجود داشت، کاربران با همان وضعیت را بازیابی می‌کند.

20- متد exists
برای بررسی این است که آیا رکوردهایی در جدول وجود دارند یا خیر. این متد یک مقدار (true یا false) برمی‌گرداند.
$usersExist = User::where('name', 'John')->exists();


21- متد doesntExist
مشابه exists است، اما بررسی می‌کند که آیا رکوردهایی وجود ندارند. این متد نیز یک مقدار (true یا false) برمی‌گرداند.
$usersNotExist = User::where('name', 'John')->doesntExist();


🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍52🔥2
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت هشتم (متدهای جوین)


1- متد raw
برای اجرای کوئری‌های خام استفاده می‌شود. از فساد DB دردسترس است.
$users = User::select(DB::raw('COUNT(*) as user_count'))
->whereRaw('age > ?', [18])
->get();


2- متد select
برای انتخاب ستون‌های خاص از یک جدول استفاده می‌شود.
$users = User::select('name', 'email')->get();


3- متد join
رکوردهای دو جدول را بر اساس یک ستون مشترک ترکیب می‌کند. فقط رکوردهایی را برمی‌گرداند که در هر دو جدول مطابقت دارند.
$users = User::join('orders', 'users.id', '=', 'orders.user_id')
->select('users.name', 'orders.order_date')
->get();

این کوئری فقط آن دسته از رکوردهایی را برمی‌گرداند که هم در جدول users و هم orders وجود دارند.

4- متد leftJoin
تمام رکوردهای جدول users را برمی‌گرداند، حتی اگر در جدول orders وجود نداشته باشد. در صورت نبود، مقادیر جدول دوم NULL خواهند بود.
$users = User::leftJoin('orders', 'users.id', '=', 'orders.user_id')
->select('users.name', 'orders.order_date')
->get();

این کوئری تمام کاربران را برمی‌گرداند و اگر کاربری هیچ سفارشی نداشته باشد، فیلدهای مربوط به سفارش به صورت NULL نمایش داده می‌شوند.

5- متد rightJoin
تمام رکوردهای جدول orders را برمی‌گرداند، حتی اگر هیچ مطابقتی در جدول users وجود نداشته باشد. مقادیر جدول اول در صورت نبود NULL خواهند بود.
$orders = Order::rightJoin('users', 'orders.user_id', '=', 'users.id')
->select('users.name', 'orders.order_date')
->get();

این کوئری تمام سفارشات را برمی‌گرداند، حتی اگر هیچ کاربری در جدول users مربوط به آن سفارش وجود نداشته باشد.

6- متد crossJoin
تمام ترکیبات ممکن بین رکوردهای دو جدول را برمی‌گرداند. این متد هیچ شرطی برای پیوند بین جداول ندارد.
$products = Product::crossJoin('categories')
->select('products.name', 'categories.category_name')
->get();

این کوئری تمام ترکیبات ممکن بین محصولات و دسته‌بندی‌ها را برمی‌گرداند.

7- متد on
برای تعیین شرط ترکیب بین دو جدول استفاده می‌شود. همراه با join و انواع دیگر آن استفاده می‌شود.
$users = User::join('orders', function ($join) {
$join->on('users.id', '=', 'orders.user_id')
->where('orders.status', 'completed');
})->get();

این کوئری کاربران و سفارش‌های آن‌ها را ترکیب می‌کند، اما فقط سفارش‌هایی که وضعیت آن‌ها "completed" است.

8- متد orOn
برای افزودن شرط OR در پیوند بین دو جدول استفاده می‌شود.
$users = User::join('orders', function ($join) {
$join->on('users.id', '=', 'orders.user_id')
->orOn('users.email', '=', 'orders.email');
})->get();

این کوئری کاربران را با سفارشات ترکیب می‌کند، به شرط اینکه user_id یا email بین دو جدول مطابقت داشته باشد.

9- متد joinSub
برای پیوند یک جدول با یک subquery استفاده می‌شود.
$latestOrders = Order::select('user_id', DB::raw('MAX(order_date) as latest_order'))
->groupBy('user_id');

$users = User::joinSub($latestOrders, 'latest_orders', function ($join) {
$join->on('users.id', '=', 'latest_orders.user_id');
})->get();

این کوئری کاربران را با جدیدترین سفارش‌های آن‌ها از طریق یک زیرکوئری ترکیب می‌کند.

10- متد joinLateral
یک subquery را برای هر رکورد جدول اصلی اجرا می‌کند و نتایج را ترکیب می‌کند. این متد در دیتابیس‌هایی که از LATERAL پشتیبانی می‌کنند، استفاده می‌شود.
$users = User::joinLateral('SELECT * FROM orders WHERE orders.user_id = users.id LIMIT 1', 'orders')
->get();

این کوئری برای هر کاربر یک subquery را اجرا می‌کند تا اولین سفارش مربوط به آن کاربر را بازیابی کند.

11- متد leftJoinLateral
اگر هیچ رکوردی در subquery وجود نداشته باشد، مقادیر NULL بازگردانده می‌شوند.
$users = User::leftJoinLateral('SELECT * FROM orders WHERE orders.user_id = users.id LIMIT 1', 'orders')
->get();

این کوئری تمام کاربران را برمی‌گرداند و در صورت وجود، اولین سفارش هر کاربر را نمایش می‌دهد. اگر سفارشی وجود نداشته باشد، مقادیر NULL برگردانده می‌شوند.

12- متد rightJoinLateral
تمام رکوردهای subquery نمایش داده می‌شوند، حتی اگر در جدول اصلی رکوردی وجود نداشته باشد.
$orders = Order::rightJoinLateral('SELECT * FROM users WHERE users.id = orders.user_id LIMIT 1', 'users')
->get();

این کوئری تمام سفارشات را برمی‌گرداند و اگر کاربری در جدول users برای آن سفارش وجود نداشته باشد، مقادیر NULL برای کاربر برگردانده می‌شود.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍32
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت نهم (متدهای گروهبندی و بارگذاری)


1- متد groupBy
برای گروه‌بندی نتایج بر اساس یک یا چند ستون استفاده می‌شود. این متد می‌تواند داده‌ها را بر اساس مقادیر مشابه در ستون‌های مشخص گروه‌بندی کند.
$users = User::select('status')
->groupBy('status')
->get();

این کوئری کاربران را بر اساس ستون status گروه‌بندی می‌کند.

2- متد havingRaw
برای اعمال شرط‌ها بر روی نتایج گروه‌بندی‌شده استفاده می‌شود. این متد به شما اجازه می‌دهد که بر روی داده‌های گروه‌بندی‌شده شرط خاصی اعمال کنید.
$users = User::select('status', \DB::raw('COUNT(*) as user_count'))
->groupBy('status')
->havingRaw('COUNT(*) > 5')
->get();

این کوئری کاربران را بر اساس status گروه‌بندی می‌کند و فقط گروه‌هایی را نمایش می‌دهد که تعداد کاربرانشان بیشتر از ۵ نفر باشد.

3- متد orHavingRaw
مشابه havingRaw است، اما به شما اجازه می‌دهد که از شرط‌های OR استفاده کنید.
$users = User::select('status', \DB::raw('COUNT(*) as user_count'))
->groupBy('status')
->havingRaw('COUNT(*) > 5')
->orHavingRaw('COUNT(*) = 2')
->get();

این کوئری کاربران را بر اساس status گروه‌بندی می‌کند و وضعیت‌هایی را نمایش می‌دهد که یا تعداد کاربران بیشتر از ۵ باشد یا دقیقا ۳ کاربر داشته باشند.

4- متد groupByRaw
برای گروه‌بندی نتایج با استفاده از عبارات خام SQL استفاده می‌شود.
$users = User::selectRaw('YEAR(created_at) as year, COUNT(*) as total')
->groupByRaw('YEAR(created_at)')
->get();

این کوئری کاربران را بر اساس سال ثبت‌نام (created_at) گروه‌بندی می‌کند و تعداد کاربران ثبت‌شده در هر سال را برمی‌گرداند.

5- متد union
برای ترکیب دو کوئری مختلف استفاده می‌شود. این متد نتایج دو کوئری را در یک مجموعه واحد ترکیب می‌کند و مقادیر تکراری را حذف می‌کند.
$firstQuery = User::select('name')->where('status', 'active');
$secondQuery = User::select('name')->where('status', 'inactive');

$users = $firstQuery->union($secondQuery)->get();

این کوئری نام‌های کاربران با وضعیت active و inactive را ترکیب می‌کند و نتیجه را بدون مقادیر تکراری برمی‌گرداند.

6- متد unionAll
مشابه union است، اما برخلاف union، تمام نتایج دو کوئری را (حتی مقادیر تکراری) برمی‌گرداند.
$firstQuery = User::select('name')->where('status', 'active');
$secondQuery = User::select('name')->where('status', 'inactive');

$users = $firstQuery->unionAll($secondQuery)->get();

این کوئری نام‌های کاربران با وضعیت active و inactive را ترکیب می‌کند، اما برخلاف union، تمام نتایج (حتی مقادیر تکراری) را برمی‌گرداند.

7- متد chunk
مجموعه‌ای از رکوردها را به بخش‌های کوچکتر تقسیم می‌کند و برای هر بخش یک تابع فراخوانی می‌کند.
User::chunk(100, function ($users) {
foreach ($users as $user) {
//
}
});

این کد کاربران را به دسته‌های ۱۰۰ تایی تقسیم می‌کند و به صورت جداگانه برای هر دسته تابعی را اجرا می‌کند. برای هر دسته ۱۰۰ کاربر، تابع تعریف‌شده فراخوانی می‌شود.

8- متد chunkById
این متد به صورت ویژه بر اساس id رکوردها بخش‌بندی می‌کند. این متد برای پردازش حجم زیادی از داده‌ها بدون نگرانی از تغییر یا حذف رکوردهای قبل از پردازش مفید است.

9- متد each
برای اجرای یک تابع روی هر رکورد به صورت جداگانه استفاده می‌شود. این متد اغلب به همراه متدهایی مانند lazy استفاده می‌شود.
User::chunk(100, function ($users) {
$users->each(function ($user) {
//
});
});

این کد ابتدا کاربران را به دسته‌های ۱۰۰ تایی تقسیم می‌کند و سپس هر کاربر را جداگانه پردازش می‌کند.

10- متد lazy
داده‌ها را به صورت تدریجی و در لحظه (به جای لود کامل) بازیابی می‌کند. این متد کارآمدتر از get() برای مجموعه داده‌های بزرگ است، چرا که همه رکوردها را همزمان در حافظه بارگذاری نمی‌کند.
User::lazy()->each(function ($user) {
//
});

این کد به تدریج کاربران را یک به یک بازیابی و پردازش می‌کند، به جای اینکه همه کاربران را همزمان لود کند.

11- متد lazyById
مشابه lazy است، اما داده‌ها را بر اساس ستون id به صورت تدریجی بارگذاری می‌کند. این متد تضمین می‌کند که داده‌ها به صورت امن بر اساس id مرتب شده و بارگذاری می‌شوند.

12- متد lazyByIdDesc
مانند lazyById است، اما رکوردها را به صورت نزولی بر اساس id بارگذاری می‌کند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
3👍3
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت دهم
(متد های صفحه بندی)

1- متد paginate
نتایج جستجو را به صورت صفحه‌بندی‌شده برمی‌گرداند و شامل اطلاعات کامل در مورد صفحات، لینک‌های صفحات و تعداد کل رکوردها است. این متد تعداد کل رکوردها را محاسبه می‌کند، بنابراین ممکن است برای دیتابیس‌های بزرگتر کمی سنگین باشد.
$users = User::paginate(10);

این کوئری ۱۰ کاربر در هر صفحه را بازیابی می‌کند. به صورت پیش‌فرض، لاراول لینک‌های صفحه‌بندی را بر اساس تعداد کل رکوردها نمایش می‌دهد.

2- متد simplePaginate
مشابه paginate است، اما تعداد کل رکوردها را محاسبه نمی‌کند. این متد از لینک‌های next و previous برای صفحه‌بندی استفاده می‌کند، بنابراین سبک‌تر است و برای مجموعه داده‌های بزرگ مناسب‌تر است.
$users = User::simplePaginate(10);

این کوئری ۱۰ کاربر در هر صفحه را بازیابی می‌کند و فقط لینک‌های "صفحه بعد" و "صفحه قبل" را ارائه می‌دهد، بدون محاسبه تعداد کل صفحات یا رکوردها.

3- متد cursorPaginate
یک روش سبک و بهینه‌تر برای صفحه‌بندی است که از شناسه‌های منحصر به فرد (cursor) برای مدیریت صفحه‌بندی استفاده می‌کند. برخلاف paginate و simplePaginate، این متد نیازی به شمارش کل رکوردها ندارد و برای مجموعه داده‌های بسیار بزرگ مناسب است. این نوع صفحه‌بندی برای مواقعی که نیاز به بارگذاری سریع دارید، استفاده می‌شود.
$users = User::cursorPaginate(10);

این کوئری ۱۰ کاربر در هر صفحه را با استفاده از شناسه‌های cursor بازیابی می‌کند، و به صورت کارآمد‌تر صفحه‌بندی انجام می‌دهد.

متد های صفحه بندی پراپرتی ها و متد های خاصی را نیز در نتیجه خود در اختیار ما قرار می دهند.

1- دریافت شماره صفحه جاری.
$users->currentPage()


2- لینک به صفحه بعد.
$users->nextPageUrl()


3- لینک به صفحه قبل.
$users->previousPageUrl()


4- تعداد رکوردهایی که در هر صفحه نمایش داده می‌شود.
$users->perPage()


5- تعداد کل رکوردها. در simplePaginate در دسترس نیست.
$users->total()


6- شماره آخرین صفحه. در simplePaginate در دسترس نیست.
$users->lastPage()


7- لینک به صفحه خاص
$users->url(3)


8- تعداد رکوردهای فعلی در صفحه جاری.
$users->count()


9- بررسی می‌کند که آیا صفحات بیشتری وجود دارد یا خیر. در دسترس از cursorPaginate.
$users->hasMorePages()


10- شناسه cursor صفحه جاری که برای پیمایش صفحات بعدی و قبلی استفاده می‌شود. در دسترس از cursorPaginate.
$users->cursor()


11- دریافت UI و لینک های صفحه بندی.
$users->links()


🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍42
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت یازدهم


1- متد table
برای انجام کوئری‌ها روی جداول دلخواه در پایگاه داده استفاده می‌شود. معمولاً از این متد زمانی استفاده می‌شود که نمی‌خواهید یا نمی‌توانید از مدل‌های Eloquent استفاده کنید.
$users = DB::table('users')->get();

این کد تمام رکوردهای جدول users را بازیابی می‌کند.

2- متد isDirty
بررسی می‌کند که آیا مقدار یک یا چند فیلد از مدل تغییر کرده است یا خیر. این متد به شما کمک می‌کند تا قبل از ذخیره‌سازی یک مدل، متوجه شوید که کدام فیلدها تغییر کرده‌اند.
$user = User::find(1);
$user->name = 'John Doe';

if ($user->isDirty('name')) {
echo 'Name has been changed!';
}

این کد بررسی می‌کند که آیا فیلد name در مدل User تغییر کرده است یا خیر. اگر تغییر کرده باشد، پیامی چاپ می‌کند.

3- متد isClean
برعکس isDirty است و بررسی می‌کند که آیا هیچ تغییری در مدل رخ نداده است. این متد بررسی می‌کند که آیا هیچ یک از فیلدهای مدل تغییر نکرده‌اند.

4- متد wasChanged
بررسی می‌کند که آیا فیلد یا فیلدهایی پس از ذخیره‌سازی مدل در پایگاه داده تغییر کرده‌اند یا خیر. این متد معمولاً پس از ذخیره‌سازی مدل (save()) استفاده می‌شود.

5- متد getOriginal
مقدار اصلی یک فیلد را پیش از تغییر و ذخیره‌سازی مدل در پایگاه داده برمی‌گرداند. این متد می‌تواند قبل یا بعد از ذخیره مدل استفاده شود.
$user = User::find(1);
echo $user->getOriginal('name');

$user->name = 'John Doe';
echo $user->getOriginal('name'); // Same

این کد مقدار اولیه فیلد name را پیش از هر تغییری نمایش می‌دهد، حتی اگر فیلد تغییر کرده باشد، همچنان مقدار اصلی را نشان می‌دهد.

6- متد sharedLock
برای جلوگیری از تغییر داده‌های انتخاب‌شده در یک کوئری توسط سایر تراکنش‌ها استفاده می‌شود، اما به سایر تراکنش‌ها اجازه خواندن این داده‌ها را می‌دهد. این نوع قفل را "قفل اشتراکی" می‌نامند. این متد برای محافظت از داده‌ها در برابر تغییرات ناگهانی در حین انجام تراکنش‌ها مفید است.
$users = User::where('active', 1)
->sharedLock()
->get();

این کد تمام کاربران فعال را با یک قفل اشتراکی انتخاب می‌کند. این کاربران نمی‌توانند در طول این تراکنش تغییر کنند، اما سایر تراکنش‌ها همچنان می‌توانند آن‌ها را بخوانند.

7- متد lockForUpdate
برای اعمال قفل به‌روزرسانی روی رکوردها استفاده می‌شود. برخلاف sharedLock، این نوع قفل تنها به یک تراکنش اجازه به‌روزرسانی رکوردهای انتخاب‌شده را می‌دهد و سایر تراکنش‌ها نمی‌توانند این رکوردها را تا زمانی که قفل آزاد نشود تغییر یا حتی بخوانند.
$users = User::where('active', 1)
->lockForUpdate()
->get();

این کوئری کاربران فعال را با قفل به‌روزرسانی انتخاب می‌کند. در طول این تراکنش، هیچ تراکنش دیگری نمی‌تواند این کاربران را تغییر دهد یا حتی آن‌ها را بخواند.

8- متد fresh
برای بازیابی آخرین نسخه یک رکورد از پایگاه داده استفاده می‌شود. این متد مدل فعلی را از پایگاه داده تازه‌سازی کرده و تغییرات جدیدی که در پایگاه داده ثبت شده‌اند را نشان می‌دهد.
$user = User::find(1);
$user->name = 'John';
$user->fresh();

این متد مدل User را دوباره از پایگاه داده بارگذاری می‌کند، بنابراین هر تغییری که در مدل انجام‌شده اما ذخیره نشده است، بازنویسی خواهد شد.

9- متد refresh
مشابه fresh است، اما علاوه بر تازه‌سازی مدل از پایگاه داده، روابط (relationships) مربوط به مدل را نیز بازنویسی می‌کند. اگر مدل دارای روابطی باشد، refresh آن‌ها را نیز دوباره از پایگاه داده بازیابی می‌کند.
$user = User::with('posts')->find(1);
$user->name = 'John';
$user->refresh();

این کد مدل User را همراه با روابط آن (مانند posts) از پایگاه داده مجدداً بازیابی می‌کند. هر تغییری که ذخیره نشده باشد، از بین می‌رود و اطلاعات از پایگاه داده مجدداً بارگذاری می‌شود.

10- متد withoutGlobalScope
به شما امکان می‌دهد یک یا چند Global Scope اعمال‌شده روی مدل‌ها را به‌صورت موقت غیرفعال کنید. در لاراول، Global Scope ها می‌توانند به صورت پیش‌فرض برای همه کوئری‌های یک مدل اعمال شوند. با این متد می‌توانید این محدودیت‌ها را کنار بگذارید.
قابلیت Global Scope در لاراول به یک محدودیت یا شرط کلی گفته می‌شود که به صورت خودکار برای تمامی کوئری‌های یک مدل اعمال می‌شود.
$users = User::withoutGlobalScope('active')->get(); // Test query

این کوئری کاربران را بدون اعمال Global Scope مربوط به کاربران فعال بازمی‌گرداند.

از قسمت بعد به آشنایی با روابط و متد های آنها می پردازیم.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
4👍1
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت دوازدهم (آشنایی با روابط)


روابط دیتابیس در لاراول به نحوه اتصال جداول به یکدیگر اشاره دارد. این روابط به شما اجازه می‌دهند که جداول مرتبط را به روشی ساده و مستقیم بازیابی و مدیریت کنید. معمولاً روابط در لاراول از طریق Eloquent ORM مدیریت می‌شوند، که این روش دسترسی و کار با داده‌های مرتبط را بسیار آسان‌تر می‌کند.

انواع روابط:

1- رابطه One-to-One (یک به یک):
در این نوع رابطه، هر رکورد از یک جدول فقط به یک رکورد از جدول دیگر مرتبط است.

مثال:
هر کاربر فقط یک پروفایل دارد.

2- رابطه One-to-Many (یک به چند):
در این نوع رابطه، هر رکورد از یک جدول می‌تواند به چندین رکورد از جدول دیگر مرتبط باشد.

مثال:
هر پست می‌تواند چندین نظر داشته باشد.

3- رابطه Many-to-One (چند به یک):
این رابطه در واقع برعکس One-to-Many است. چند رکورد از جدول دوم به یک رکورد در جدول اول مرتبط است.

مثال:
چند نظر به یک پست تعلق دارد.

4- رابطه Many-to-Many (چند به چند):
در این نوع رابطه، هر رکورد از یک جدول می‌تواند به چندین رکورد از جدول دیگر مرتبط باشد و بالعکس. این نوع رابطه از طریق یک جدول واسط (pivot table) مدیریت می‌شود.

مثال:
هر کاربر می‌تواند چندین نقش داشته باشد و هر نقش به چندین کاربر اختصاص داده شده باشد.

5- رابطه Has-Many-Through (چندین رکورد از طریق یک رابطه واسط):
این نوع رابطه به شما امکان می‌دهد که رکوردهای یک جدول را از طریق رابطه‌ای با یک جدول واسط بازیابی کنید.

مثال:
هر شهر می‌تواند چندین دکتر از طریق بیمارستان‌ها داشته باشد.

6- رابطه Polymorphic Relationships (روابط چندشکلی):
این نوع رابطه به شما امکان می‌دهد که یک مدل به چندین مدل دیگر مرتبط باشد.

مثال:
یک عکس می‌تواند به یک پست یا به یک کاربر مربوط باشد.

مثال ساده از رابطه یک به یک (One-to-One)

فرض کنید دو جدول به نام‌های users و profiles دارید. هر کاربر فقط یک پروفایل دارد و هر پروفایل به یک کاربر تعلق دارد. با استفاده از رابطه یک به یک در لاراول، می‌توانید به سادگی این رابطه را مدیریت و بازیابی کنید.

مدل User:
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}

متد profile نشان می دهد که هر کاربر یک پروفایل دارد.

مدل Profile:
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}

متد user نشان می دهد که هر پروفایل متعلق به یک کاربر است.

نکته: جدول profiles دارای ستونی به نام user_id است که کلید خارجی (foreign key) به جدول users می‌باشد.

استفاده از رابطه در کد:

به جای نوشتن یک کوئری پیچیده برای اتصال دو جدول و بازیابی پروفایل یک کاربر، می‌توانید به سادگی از رابطه Eloquent استفاده کنید.
در ادامه یک مثال بدون استفاده از روابط و یک مثال با استفاده از روابط آورده شده.

بدون رابطه:
برای بازیابی پروفایل کاربر به صورت دستی باید کوئری پیچیده‌تری بنویسید:
$user = User::find(1);
$profile = Profile::where('user_id', $user->id)->first();


با رابطه یک به یک:
اما با استفاده از رابطه، کار شما بسیار ساده‌تر و خواناتر می‌شود:
$user = User::find(1);
$profile = $user->profile;

پراپرتی profile در کد بالا درواقع همان متد profile است که در مدل User تعریف کرده ایم.

در قسمت های بعد هر یک از این روابط را به طور مفصل توضیح خواهیم داد.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
4👍1
فصل چهار - مدل‌ها و Eloquent ORM

بخش سوم - روابط - قسمت اول


رابطه یک به یک (One-to-One)

در رابطه یک به یک، هر رکورد از یک جدول فقط به یک رکورد از جدول دیگر مرتبط است. این نوع رابطه زمانی استفاده می‌شود که هر موجودیت در یک جدول دقیقاً با یک موجودیت در جدول دیگر مرتبط باشد.

به عنوان مثال:
- هر کاربر دارای یک پروفایل منحصر به فرد است.
- هر مشتری ممکن است فقط یک آدرس داشته باشد.
- هر کارمند ممکن است فقط یک کارت شناسایی داشته باشد.

1- ساختار جداول:
برای پیاده‌سازی این نوع رابطه در پایگاه داده، شما به دو جدول نیاز دارید. یک جدول اصلی و یک جدول وابسته که از یک کلید خارجی (foreign key) برای برقراری ارتباط استفاده می‌کند.

مثال:
جدول users اطلاعات کاربران را نگهداری می‌کند و دارای یک فیلد id به صورت primary key در کنار سایر فیلد ها.
جدول profiles پروفایل کاربران را نگهداری می‌کند و دارای یک کلید خارجی به نام user_id است که به فیلد id جدول users مرتبط است.


2- ایجاد مدل‌ها:
هر جدول در پایگاه داده با یک مدل Eloquent در لاراول نمایش داده می‌شود.

برای تعریف رابطه یک به یک (One-to-One) در لاراول، از متدهای hasOne و belongsTo استفاده می‌شود.

1- متد hasOne
برای تعریف رابطه "یک به یک" استفاده می‌شود، جایی که یک مدل صاحب (owning) یک رکورد از مدل دیگر است.
// User Model
public function profile()
{
return $this->hasOne(Profile::class);
}

این کد به این معناست که هر User دارای یک Profile است.

پارامترها:

1- مدل مربوطه - الزامی
این پارامتر تعیین می‌کند که مدل مربوطه چیست. در اینجا مدل Profile مرتبط با User است.

2- کلید خارجی - اختیاری
نام ستونی که به عنوان کلید خارجی در جدول Profile ذخیره شده است. اگر این پارامتر تعیین نشود، لاراول به‌طور پیش‌فرض نام مدل والد را با پسوند _id در نظر می‌گیرد. برای مثال، به‌طور پیش‌فرض کلید خارجی در جدول profiles به صورت user_id در نظر گرفته می‌شود.

3- کلید محلی - اختیاری
ستونی که در مدل والد به عنوان کلید محلی برای رابطه استفاده می‌شود. به‌طور پیش‌فرض، این کلید، id است. اگر کلید محلی شما ستون دیگری است، می‌توانید آن را مشخص کنید.
———
2- متد belongsTo
برای تعریف رابطه‌ای استفاده می‌شود که در آن یک مدل متعلق به مدل دیگری است. این متد معمولاً در سمت جدول فرزند (مثلاً Profile) برای اشاره به مدل والد (مثلاً User) استفاده می‌شود.
// Profile Model
public function user()
{
return $this->belongsTo(User::class);
}

این کد به این معناست که هر پروفایل متعلق به یک کاربر است.

پارامترها:

1- مدل مربوطه - الزامی
این پارامتر مدل والد را مشخص می‌کند. در اینجا مدل User با مدل Profile مرتبط است.

2- کلید خارجی - اختیاری
نام ستونی که به عنوان کلید خارجی در جدول فعلی (در این مثال profiles) استفاده می‌شود. اگر این پارامتر تعیین نشود، لاراول به‌طور پیش‌فرض نام مدل والد را با پسوند _id در نظر می‌گیرد، به عنوان مثال user_id.

3- کلید والد - اختیاری
ستونی که در مدل والد به عنوان کلید منحصر به فرد استفاده می‌شود. به‌طور پیش‌فرض، این کلید id است. اگر کلید والد شما ستونی غیر از id است، می‌توانید آن را تعیین کنید.
———
3- پیاده‌سازی رابطه:
پس از تعریف رابطه در مدل‌ها، شما می‌توانید به راحتی به داده‌های مرتبط دسترسی داشته باشید.
$user = User::find(1);
$profile = $user->profile;
// OR
$profile = Profile::find(1);
$user = $profile->user;

پراپرتی های فراخوانی شده دقیقا هم نام با متد هایی است که در مدل تعریف کرده ایم.

4- درج داده‌ها در جداول مرتبط:
$user = User::find(1);
$profile = new Profile([
'bio' => 'Full-Stack Developer'
]);

$user->profile()->save($profile);

ابتدا کاربر با شناسه 1 را پیدا می‌کنیم. سپس یک پروفایل جدید برای آن کاربر ایجاد می‌کنیم. در نهایت از متد save() استفاده می‌کنیم تا پروفایل به طور خودکار با کلید خارجی (user_id) به کاربر مرتبط شود.

5- به‌روزرسانی داده‌ها:
$user = User::find(1);
$user->profile->bio = 'Updated Bio';
$user->profile->save();

فیلد bio در پروفایل کاربر را تغییر می‌دهیم. در نهایت تغییرات را با save() ذخیره می‌کنیم.

به طور کلی با فراخوانی رابطه از طریق پراپرتی یا متد مربوطه، به رکورد آن دسترسی دارید و می توانید تغییرات مورد نظر را نسبت به رکورد والد انجام دهید.
به عنوان مثال نغییر پروفایل مربوط به کاربر مالک پروفایل.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
2👍1
فصل چهار - مدل‌ها و Eloquent ORM

بخش سوم - روابط - قسمت دوم

رابطه One-to-Many (یک به چند)


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

مثال:
- یک کاربر می‌تواند چندین پست داشته باشد.
- یک پست می‌تواند چندین نظر داشته باشد.

1- ساختار جداول:
برای پیاده‌سازی رابطه یک به چند، ما نیاز به دو جدول داریم: یکی به عنوان مدل والد و دیگری به عنوان مدل فرزند. جدول فرزند یک کلید خارجی (foreign key) دارد که به مدل والد مرتبط است.

مثال:
جدول users اطلاعات کاربران را نگهداری می‌کند و یک فیلد id به عنوان primary key دارد.
جدول posts اطلاعات پست‌های کاربران را نگهداری می‌کند و دارای یک ستون به نام user_id است که به کلید خارجی در جدول users اشاره می‌کند.

2- ایجاد مدل‌ها:

1-مدل User، نشان‌دهنده جدول users است. این مدل می‌تواند چندین پست داشته باشد، بنابراین رابطه یک به چند از طریق متد hasMany تعریف می‌شود. این متد مشابه hasOne است اما چندین رکورد را تحت تاثیر قرار می دهد.
public function posts()
{
return $this->hasMany(Post::class);
}


2- مدل Post نشان‌دهنده جدول posts است. هر پست به یک کاربر تعلق دارد، بنابراین رابطه یک به چند از سمت پست با متد belongsTo تعریف می‌شود.
public function user()
{
return $this->belongsTo(User::class);
}


3- پیاده‌سازی رابطه:
برای دسترسی به تمامی پست‌های یک کاربر، می‌توانید از پراپرتی posts استفاده کنید که رابطه hasMany را تعریف کرده است.
$user = User::find(1);
$posts = $user->posts;


برای دسترسی به کاربر مربوط به یک پست، می‌توانید از پراپرتی user استفاده کنید که رابطه belongsTo را تعریف کرده است.
$post = Post::find(1);
$user = $post->user;


برای ایجاد یک پست جدید برای یک کاربر، می‌توانید از متد posts() استفاده کنید و پست را به آن کاربر مرتبط کنید.
$user = User::find(1);

$post = new Post([
'title' => 'My Third Post'
]);

$user->posts()->save($post);


و حتی می‌توانید پست‌های یک کاربر را به‌سادگی به‌روزرسانی کنید.
$user = User::find(1);
$post = $user->posts()->first();
$post->title = 'Updated Title';
$post->save();


با استفاده از روابط در لاراول بدون استفاده از عملیات های پیچیده رکورد های مرتبط به هم بازیابی/حذف/ویرایش یا ایجاد می شوند.

رابطه‌های یک به یک و یک به چند، دو نمونه از ساده‌ترین روابط در لاراول هستند که بدون آن‌ها نیز می‌توانیم کوئری‌هایمان را بنویسیم، هرچند کار کمی پیچیده‌تر خواهد بود. اما در قسمت‌های بعدی با روابط پیچیده‌تر و پیشرفته‌تری آشنا خواهیم شد که اهمیت بیشتری در ساده‌سازی و بهینه‌سازی کوئری‌ها دارند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
2👍2
فصل چهار - مدل‌ها و Eloquent ORM

بخش سوم - روابط - قسمت سوم

رابطه Many-to-Many (چند به چند)

رابطه چند به چند (Many-to-Many) یکی از روابط رایج در سیستم‌های دیتابیس است که در آن چند رکورد از یک جدول می‌تواند با چندین رکورد از جدول دیگر مرتبط باشد، و برعکس. برای پیاده‌سازی این نوع رابطه، از یک جدول واسط (pivot table) استفاده می‌شود که شناسه‌های هر دو جدول را نگه می‌دارد و این ارتباط را برقرار می‌کند.

مثال:

- یک کاربر می‌تواند چندین نقش داشته باشد و یک نقش می‌تواند به چندین کاربر اختصاص داده شود.
- یک دانشجو می‌تواند در چندین کلاس شرکت کند و یک کلاس می‌تواند چندین دانشجو داشته باشد.
- یک محصول می‌تواند در چندین دسته‌بندی قرار بگیرد و هر دسته‌بندی می‌تواند شامل چندین محصول باشد.

1- ساختار جداول:

برای پیاده‌سازی رابطه چند به چند، شما به سه جدول نیاز دارید:

مثال:

1- جدول اصلی (users): اطلاعات کاربران را نگه می‌دارد.
2- جدول ثانویه (roles): اطلاعات نقش‌ها را نگه می‌دارد.
3- جدول واسط (pivot table - role_user): جدول واسط، شناسه‌های کاربران و نقش‌ها را نگه می‌دارد و رابطه چند به چند را برقرار می‌کند.

جداول اصلی و ثانویه، هر کدام دارای یک فیلد id به عنوان primary key هستند.

جدول واسط دارای دو فیلد foreign key برای جداول اصلی و ثانویه هستند. این فیلد ها به صورت پیشفرض باید با نام های جداول اصلی با پسوند _id باشند.
در مثال ما role_id و user_id هستند.
همچنین نام جدول واسط باید ترکیب مفرد جداول اصلی و واسط باشد. در مثال ما role_user می باشد.

2- ایجاد مدل‌ها:

مدل User نشان‌دهنده جدول users است و رابطه چند به چند با مدل Role دارد. این رابطه با استفاده از متد belongsToMany تعریف می‌شود.
public function roles()
{
return $this->belongsToMany(Role::class);
}


مدل Role نشان‌دهنده جدول roles است و رابطه چند به چند با مدل User دارد. این رابطه نیز با استفاده از متد belongsToMany تعریف می‌شود.
public function users()
{
return $this->belongsToMany(User::class);
}


متد belongsToMany :
برای تعریف رابطه چند به چند استفاده می‌شود و می‌تواند چندین پارامتر اختیاری دریافت کند.

1. مدل مربوطه - الزامی
نام مدل مرتبط با این رابطه.

2. جدول واسط - اختیاری
نام جدول واسط (pivot table). اگر این پارامتر تعیین نشود، لاراول به‌طور خودکار نام جداول مرتبط را به ترتیب حروف الفبا ترکیب می‌کند (مثلاً role_user).

3. کلید خارجی مدل فعلی - اختیاری
نام ستون کلید خارجی در جدول واسط که به مدل فعلی اشاره دارد. اگر تعیین نشود، به‌طور پیش‌فرض نام مدل به همراه _id استفاده می‌شود.

4. کلید خارجی مدل مربوطه - اختیاری
نام ستون کلید خارجی در جدول واسط که به مدل مرتبط اشاره دارد. اگر تعیین نشود، به‌طور پیش‌فرض نام مدل مربوطه به همراه _id استفاده می‌شود.

5. کلید والد در مدل فعلی - اختیاری
ستون کلید منحصر به فرد در مدل فعلی. به‌طور پیش‌فرض، لاراول از ستون id استفاده می‌کند.

6. کلید والد در مدل مرتبط - اختیاری
ستون کلید منحصر به فرد در مدل مربوطه. به‌طور پیش‌فرض، لاراول از ستون id استفاده می‌کند.

3- استفاده از رابطه:

برای بازیابی تمامی نقش‌های یک کاربر، از پراپرتی roles که با استفاده از belongsToMany تعریف شده، استفاده می‌کنیم.
$user = User::find(1);
$roles = $user->roles;


برای بازیابی تمامی کاربران مرتبط با یک نقش، از پراپرتی users که در مدل Role تعریف شده، استفاده می‌کنیم.
$role = Role::find(1);
$users = $role->users;


در قسمت بعد متد های مربوط به اعمال تغییرات روی روابط چند به چند توضیح داده می شود.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
4👍3