فصل چهار - مدلها و Eloquent ORM
بخش پنجم - پراپرتی های مدل
1- پراپرتی table
نام جدول دیتابیس مرتبط با مدل را مشخص میکند. بهصورت پیشفرض، لاراول نام مدل را با حروف کوچک و به صورت جمع تبدیل میکند.
2- پراپرتی primaryKey
برای مشخص کردن نام ستون کلید اصلی جدول استفاده میشود. بهصورت پیشفرض، از ستون id به عنوان کلید اصلی استفاده میکند.
3- پراپرتی keyType
نوع داده کلید اصلی را مشخص میکند. بهصورت پیشفرض، لاراول از نوع int برای کلید اصلی استفاده میکند.
4- پراپرتی incrementing
مشخص میکند که آیا کلید اصلی به صورت خودکار افزایش مییابد یا خیر. بهصورت پیشفرض، این ویژگی true است و کلید اصلی افزایش مییابد.
5- پراپرتی timestamps
مشخص میکند که آیا ستونهای created_at و updated_at بهصورت خودکار مدیریت شوند یا خیر. بهصورت پیشفرض، این ویژگی true است.
6- پراپرتی dateFormat
فرمت ذخیرهسازی تاریخها در دیتابیس را مشخص میکند. بهصورت پیشفرض، از فرمت Y-m-d H:i:s استفاده میکند.
7- پراپرتی connection
مشخص میکند که مدل باید از کدام اتصال دیتابیس استفاده کند. بهصورت پیشفرض، مدلها از اتصال اصلی که در فایل config/database.php تعریف شده است استفاده میکنند.
8- پراپرتی fillable
لیستی از ستونهایی را مشخص میکند که در هنگام انتساب جمعی (Mass Assignment) اجازه مقداردهی دارند. این ویژگی برای جلوگیری از حملات Mass Assignment بسیار مهم است.
9- پراپرتی guarded
برعکس fillable عمل میکند و ستونهایی که نباید بهصورت جمعی مقداردهی شوند را مشخص میکند. اگر guarded را خالی بگذارید، به معنای آن است که همه ستونها محافظت شدهاند.
10- پراپرتی hidden
مشخص میکند که کدام ستونها در هنگام تبدیل مدل به آرایه یا JSON باید مخفی شوند و نمایش داده نشوند.
11- پراپرتی visible
برعکس hidden عمل میکند و مشخص میکند که فقط ستونهای مشخصشده در خروجی JSON یا آرایه نمایش داده شوند. سایر ستونها مخفی خواهند بود.
12- پراپرتی dates
مشخص میکند که کدام ستونها به عنوان تاریخ در نظر گرفته شوند و بهطور خودکار به Carbon تبدیل شوند. بهصورت پیشفرض، ستونهای created_at و updated_at به عنوان تاریخ مدیریت میشوند.
13- پراپرتی touches
برای بهروزرسانی زمان مدلهای مرتبط استفاده میشود. اگر یک مدل دارای رابطهای باشد که باید هنگام تغییر مدل فرزند، زمان بهروزرسانی (updated_at) مدل والد نیز تغییر کند، میتوانید از این ویژگی استفاده کنید.
14- پراپرتی perPage
تعداد رکوردهایی که در هر صفحه برای صفحهبندی (pagination) نمایش داده میشوند را تنظیم میکند. بهصورت پیشفرض، مقدار perPage برابر 15 است.
15- پراپرتی morphClass
برای روابط Polymorphic استفاده میشود و مشخص میکند که لاراول چه مقداری را در ستون *_type قرار دهد. بهصورت پیشفرض، نام کامل کلاس مدل در ستون *_type ذخیره میشود.
16- پراپرتی relationResolvers
برای بازنویسی روابط در مدلها استفاده میشود. اگر بخواهید نحوه فراخوانی یک رابطه را تغییر دهید یا بهصورت دلخواه تعریف کنید، میتوانید از relationResolvers استفاده کنید.
17- پراپرتی foreignKeyType
برای تعریف نوع داده کلیدهای خارجی استفاده میشود.
تعدادی از پراپرتی در پست های بعدی توضیح داده می شود.
توجه داشته باشید که مدل ها، پراپرتی ها و متد های قابل Override زیادی دارند که در این دوره نام برده نمی شوند.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش پنجم - پراپرتی های مدل
1- پراپرتی table
نام جدول دیتابیس مرتبط با مدل را مشخص میکند. بهصورت پیشفرض، لاراول نام مدل را با حروف کوچک و به صورت جمع تبدیل میکند.
protected $table = 'my_custom_table';
2- پراپرتی primaryKey
برای مشخص کردن نام ستون کلید اصلی جدول استفاده میشود. بهصورت پیشفرض، از ستون id به عنوان کلید اصلی استفاده میکند.
protected $primaryKey = 'user_id';
3- پراپرتی keyType
نوع داده کلید اصلی را مشخص میکند. بهصورت پیشفرض، لاراول از نوع int برای کلید اصلی استفاده میکند.
protected $keyType = 'string';
4- پراپرتی incrementing
مشخص میکند که آیا کلید اصلی به صورت خودکار افزایش مییابد یا خیر. بهصورت پیشفرض، این ویژگی true است و کلید اصلی افزایش مییابد.
public $incrementing = false;
5- پراپرتی timestamps
مشخص میکند که آیا ستونهای created_at و updated_at بهصورت خودکار مدیریت شوند یا خیر. بهصورت پیشفرض، این ویژگی true است.
public $timestamps = false;
6- پراپرتی dateFormat
فرمت ذخیرهسازی تاریخها در دیتابیس را مشخص میکند. بهصورت پیشفرض، از فرمت Y-m-d H:i:s استفاده میکند.
protected $dateFormat = 'U';
7- پراپرتی connection
مشخص میکند که مدل باید از کدام اتصال دیتابیس استفاده کند. بهصورت پیشفرض، مدلها از اتصال اصلی که در فایل config/database.php تعریف شده است استفاده میکنند.
protected $connection = 'mysql2';
8- پراپرتی fillable
لیستی از ستونهایی را مشخص میکند که در هنگام انتساب جمعی (Mass Assignment) اجازه مقداردهی دارند. این ویژگی برای جلوگیری از حملات Mass Assignment بسیار مهم است.
protected $fillable = ['name', 'email', 'password'];
9- پراپرتی guarded
برعکس fillable عمل میکند و ستونهایی که نباید بهصورت جمعی مقداردهی شوند را مشخص میکند. اگر guarded را خالی بگذارید، به معنای آن است که همه ستونها محافظت شدهاند.
protected $guarded = ['is_admin'];
10- پراپرتی hidden
مشخص میکند که کدام ستونها در هنگام تبدیل مدل به آرایه یا JSON باید مخفی شوند و نمایش داده نشوند.
protected $hidden = ['password', 'remember_token'];
11- پراپرتی visible
برعکس hidden عمل میکند و مشخص میکند که فقط ستونهای مشخصشده در خروجی JSON یا آرایه نمایش داده شوند. سایر ستونها مخفی خواهند بود.
protected $visible = ['name', 'email'];
12- پراپرتی dates
مشخص میکند که کدام ستونها به عنوان تاریخ در نظر گرفته شوند و بهطور خودکار به Carbon تبدیل شوند. بهصورت پیشفرض، ستونهای created_at و updated_at به عنوان تاریخ مدیریت میشوند.
protected $dates = ['birthday'];
13- پراپرتی touches
برای بهروزرسانی زمان مدلهای مرتبط استفاده میشود. اگر یک مدل دارای رابطهای باشد که باید هنگام تغییر مدل فرزند، زمان بهروزرسانی (updated_at) مدل والد نیز تغییر کند، میتوانید از این ویژگی استفاده کنید.
protected $touches = ['post'];
14- پراپرتی perPage
تعداد رکوردهایی که در هر صفحه برای صفحهبندی (pagination) نمایش داده میشوند را تنظیم میکند. بهصورت پیشفرض، مقدار perPage برابر 15 است.
protected $perPage = 20;
15- پراپرتی morphClass
برای روابط Polymorphic استفاده میشود و مشخص میکند که لاراول چه مقداری را در ستون *_type قرار دهد. بهصورت پیشفرض، نام کامل کلاس مدل در ستون *_type ذخیره میشود.
protected $morphClass = 'post';
16- پراپرتی relationResolvers
برای بازنویسی روابط در مدلها استفاده میشود. اگر بخواهید نحوه فراخوانی یک رابطه را تغییر دهید یا بهصورت دلخواه تعریف کنید، میتوانید از relationResolvers استفاده کنید.
protected $relationResolvers = [
'profile' => 'resolveProfile',
];
public function resolveProfile()
{
return $this->hasOne(Profile::class);
}
17- پراپرتی foreignKeyType
برای تعریف نوع داده کلیدهای خارجی استفاده میشود.
protected $foreignKeyType = 'string';
تعدادی از پراپرتی در پست های بعدی توضیح داده می شود.
توجه داشته باشید که مدل ها، پراپرتی ها و متد های قابل Override زیادی دارند که در این دوره نام برده نمی شوند.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
👍4
فصل چهار - مدلها و Eloquent ORM
بخش ششم - Casts
کست یک ویژگی در مدلهای لاراول است که به شما امکان میدهد نوع دادهای که از ستونهای دیتابیس بازیابی میشود یا به دیتابیس ذخیره میشود را خودکار مدیریت کنید. لاراول از Casts برای تبدیل دادهها به نوعهای مختلف استفاده میکند تا توسعهدهندگان بدون نیاز به نوشتن کد اضافی، نوع داده موردنظر خود را مدیریت کنند.
برای تعریف Castهای پیشفرض، متد casts() را در مدل خود پیادهسازی میکنید.
این کست ها باعث می شود داده به طور خودکار به فرمت یا نوع مشخص شده تبدیل شوند، به عنوان مثال اگر فیلد is_active برابر 0 باشد به واسطه کست ها به false تبدیل می شود.
در لاراول، چندین نوع Cast پیشفرض وجود دارد که به شما امکان میدهد دادهها را به صورت خودکار به نوعهای مختلف تبدیل کنید. در زیر لیست این Castها آورده شده است:
علاوه بر Castهای پیشفرض، لاراول این امکان را به شما میدهد تا Casts سفارشی بسازید. این Castها به شما اجازه میدهند که تبدیلهای پیچیدهتری برای دادهها اعمال کنید.
برای ساخت یک Cast سفارشی، ابتدا باید یک کلاس ایجاد کنید که قرارداد (interface) CastsAttributes را پیادهسازی کند. این کلاس باید دو متد get() و set() را پیادهسازی کند.
برای این کار می توانید از دستور زیر استفاده کنید:
این کامند یک کلاس برای کست سفارشی شما ایجاد می کنید و شما می توانید متد ها آن را پیاده سازی کنید:
درصورتی که یک فیلد را از دیتابیس فراخوانی کنیم و کست Uppercase ما روی آن اعمال شده باشد متد get اجرا خواهد شد و درصورت دخیره در یک فیلد دیتابیس دارای کست Uppercase متد set اجرا خواهد شد.
توضیح ورودی های متد set و متد get:
1- پارامتر model:
این پارامتر یک شیء مدل را شامل میشود که نشاندهنده مدل فعلی است که در حال تعامل با آن هستید. این پارامتر به شما اجازه میدهد به ویژگیهای مدل دسترسی داشته باشید.
2- پارامتر key:
این پارامتر نام ویژگی (attribute)ای است که Cast برای آن تعریف شده است. با این پارامتر، میتوانید بدانید که کدام فیلد از مدل در حال پردازش است.
3- پارامتر value:
این پارامتر مقدار فعلی ویژگی (attribute) را شامل میشود. هنگام استفاده از get()، مقدار بازیابیشده از دیتابیس در این پارامتر قرار دارد و در set()، مقدار جدیدی که کاربر برای آن ویژگی تنظیم کرده است.
4- پارامتر attributes:
این پارامتر آرایهای شامل همه ویژگیهای مدل و مقادیر آنها است. این پارامتر به شما امکان میدهد به سایر ویژگیهای مدل دسترسی پیدا کنید و بر اساس مقادیر آنها تغییراتی ایجاد کنید.
پس از تعریف Cast سفارشی، شما میتوانید آن را در متد casts() مدل خود استفاده کنید.
نکته: در نسخه 10 به قبل کست ها به جای متد در یک پراپرتی ثبت میشوند:
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش ششم - Casts
کست یک ویژگی در مدلهای لاراول است که به شما امکان میدهد نوع دادهای که از ستونهای دیتابیس بازیابی میشود یا به دیتابیس ذخیره میشود را خودکار مدیریت کنید. لاراول از Casts برای تبدیل دادهها به نوعهای مختلف استفاده میکند تا توسعهدهندگان بدون نیاز به نوشتن کد اضافی، نوع داده موردنظر خود را مدیریت کنند.
برای تعریف Castهای پیشفرض، متد casts() را در مدل خود پیادهسازی میکنید.
protected function casts(): array
{
return [
'is_active' => 'boolean',
'birthday' => 'date',
];
}
این کست ها باعث می شود داده به طور خودکار به فرمت یا نوع مشخص شده تبدیل شوند، به عنوان مثال اگر فیلد is_active برابر 0 باشد به واسطه کست ها به false تبدیل می شود.
در لاراول، چندین نوع Cast پیشفرض وجود دارد که به شما امکان میدهد دادهها را به صورت خودکار به نوعهای مختلف تبدیل کنید. در زیر لیست این Castها آورده شده است:
'is_active' => 'boolean',
'age' => 'integer',
'price' => 'float',
'phone_number' => 'string',
'meta' => 'array',
'preferences' => 'json',
'settings' => 'object',
'tags' => 'collection',
'birthday' => 'date',
'created_at' => 'datetime',
'event_time' => 'timestamp',
'birthday' => 'immutable_date',
'created_at' => 'immutable_datetime',
'password' => 'encrypted',
علاوه بر Castهای پیشفرض، لاراول این امکان را به شما میدهد تا Casts سفارشی بسازید. این Castها به شما اجازه میدهند که تبدیلهای پیچیدهتری برای دادهها اعمال کنید.
برای ساخت یک Cast سفارشی، ابتدا باید یک کلاس ایجاد کنید که قرارداد (interface) CastsAttributes را پیادهسازی کند. این کلاس باید دو متد get() و set() را پیادهسازی کند.
برای این کار می توانید از دستور زیر استفاده کنید:
php artisan make:cast Uppercase
این کامند یک کلاس برای کست سفارشی شما ایجاد می کنید و شما می توانید متد ها آن را پیاده سازی کنید:
class Uppercase implements CastsAttributes
{
public function get($model, string $key, $value, array $attributes)
{
return strtoupper($value);
}
public function set($model, string $key, $value, array $attributes)
{
return strtolower($value);
}
}
درصورتی که یک فیلد را از دیتابیس فراخوانی کنیم و کست Uppercase ما روی آن اعمال شده باشد متد get اجرا خواهد شد و درصورت دخیره در یک فیلد دیتابیس دارای کست Uppercase متد set اجرا خواهد شد.
توضیح ورودی های متد set و متد get:
1- پارامتر model:
این پارامتر یک شیء مدل را شامل میشود که نشاندهنده مدل فعلی است که در حال تعامل با آن هستید. این پارامتر به شما اجازه میدهد به ویژگیهای مدل دسترسی داشته باشید.
2- پارامتر key:
این پارامتر نام ویژگی (attribute)ای است که Cast برای آن تعریف شده است. با این پارامتر، میتوانید بدانید که کدام فیلد از مدل در حال پردازش است.
3- پارامتر value:
این پارامتر مقدار فعلی ویژگی (attribute) را شامل میشود. هنگام استفاده از get()، مقدار بازیابیشده از دیتابیس در این پارامتر قرار دارد و در set()، مقدار جدیدی که کاربر برای آن ویژگی تنظیم کرده است.
4- پارامتر attributes:
این پارامتر آرایهای شامل همه ویژگیهای مدل و مقادیر آنها است. این پارامتر به شما امکان میدهد به سایر ویژگیهای مدل دسترسی پیدا کنید و بر اساس مقادیر آنها تغییراتی ایجاد کنید.
پس از تعریف Cast سفارشی، شما میتوانید آن را در متد casts() مدل خود استفاده کنید.
protected function casts(): array
{
return [
'name' => Uppercase::class,
];
}
نکته: در نسخه 10 به قبل کست ها به جای متد در یک پراپرتی ثبت میشوند:
protected $casts = [
'is_admin' => 'boolean',
];
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
👍7❤3
فصل چهار - مدلها و Eloquent ORM
بخش هفتم - Accessors و Mutators
به شما این امکان را میدهند که نحوه دسترسی به ویژگیهای مدل یا نحوه تغییر و ذخیرهسازی دادهها در مدل را سفارشیسازی کنید. شما میتوانید Accessors برای نمایش دادهها به شکلی متفاوت و Mutators برای ذخیرهسازی دادهها با فرمت موردنظر خود ایجاد کنید.
1- Accessors (دسترسیدهندهها)
برای تغییر دادههایی استفاده میشود که هنگام دسترسی به یک ویژگی مدل نمایش داده میشوند.
فرض کنید یک مدل کاربر (User) دارید و میخواهید نام کاربر همیشه با حرف اول بزرگ نمایش داده شود.
در این مثال، هر زمانی که به ویژگی name مدل User دسترسی پیدا کنید، مقدار آن با حرف اول بزرگ برگردانده میشود.
2- Mutators (تغییردهندهها)
برای تغییر و اصلاح دادهها قبل از ذخیرهسازی در دیتابیس استفاده میشوند.
فرض کنید میخواهید مطمئن شوید که هر زمان ایمیل کاربر ذخیره میشود، به حروف کوچک تبدیل شود.
در این مثال، هر زمانی که ایمیلی به مدل User اختصاص داده میشود، قبل از ذخیرهسازی به حروف کوچک تبدیل خواهد شد.
3- ترکیب Accessors و Mutators
در بسیاری از موارد، شما میتوانید Accessors و Mutators را در یک متد به صورت ترکیبی استفاده کنید. یعنی یک متد هم میتواند دادهها را هنگام دسترسی تغییر دهد (Accessor) و هم هنگام ذخیرهسازی (Mutator).
فرض کنید میخواهید نام کاربر هنگام دسترسی به آن با حرف بزرگ و هنگام ذخیرهسازی با حروف کوچک مدیریت شود.
در این مثال، نام کاربر هنگام بازیابی از دیتابیس با حرف بزرگ نمایش داده میشود، اما قبل از ذخیره به حروف کوچک تبدیل میشود.
4- استفاده از Accessors و Mutators
هنگامی که Accessors و Mutators تعریف میشوند، شما میتوانید بهطور معمول از ویژگیهای مدل استفاده کنید.
5- روش قدیمی (ورژن 8 به قبل)
در روش قدیمی، برای تعریف Accessors و Mutators باید از متدهای
get{AttributeName}Attribute و set{AttributeName}Attribute
استفاده میکردید.
اما در استفاده با روش جدید یکسان است.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش هفتم - Accessors و Mutators
به شما این امکان را میدهند که نحوه دسترسی به ویژگیهای مدل یا نحوه تغییر و ذخیرهسازی دادهها در مدل را سفارشیسازی کنید. شما میتوانید Accessors برای نمایش دادهها به شکلی متفاوت و Mutators برای ذخیرهسازی دادهها با فرمت موردنظر خود ایجاد کنید.
1- Accessors (دسترسیدهندهها)
برای تغییر دادههایی استفاده میشود که هنگام دسترسی به یک ویژگی مدل نمایش داده میشوند.
فرض کنید یک مدل کاربر (User) دارید و میخواهید نام کاربر همیشه با حرف اول بزرگ نمایش داده شود.
protected function name(): Attribute
{
return Attribute::make(
get: fn ($value) => ucfirst($value)
);
}
در این مثال، هر زمانی که به ویژگی name مدل User دسترسی پیدا کنید، مقدار آن با حرف اول بزرگ برگردانده میشود.
2- Mutators (تغییردهندهها)
برای تغییر و اصلاح دادهها قبل از ذخیرهسازی در دیتابیس استفاده میشوند.
فرض کنید میخواهید مطمئن شوید که هر زمان ایمیل کاربر ذخیره میشود، به حروف کوچک تبدیل شود.
protected function email(): Attribute
{
return Attribute::make(
set: fn ($value) => strtolower($value)
);
}
در این مثال، هر زمانی که ایمیلی به مدل User اختصاص داده میشود، قبل از ذخیرهسازی به حروف کوچک تبدیل خواهد شد.
3- ترکیب Accessors و Mutators
در بسیاری از موارد، شما میتوانید Accessors و Mutators را در یک متد به صورت ترکیبی استفاده کنید. یعنی یک متد هم میتواند دادهها را هنگام دسترسی تغییر دهد (Accessor) و هم هنگام ذخیرهسازی (Mutator).
فرض کنید میخواهید نام کاربر هنگام دسترسی به آن با حرف بزرگ و هنگام ذخیرهسازی با حروف کوچک مدیریت شود.
protected function name(): Attribute
{
return Attribute::make(
get: fn ($value) => ucfirst($value),
set: fn ($value) => strtolower($value)
);
}
در این مثال، نام کاربر هنگام بازیابی از دیتابیس با حرف بزرگ نمایش داده میشود، اما قبل از ذخیره به حروف کوچک تبدیل میشود.
4- استفاده از Accessors و Mutators
هنگامی که Accessors و Mutators تعریف میشوند، شما میتوانید بهطور معمول از ویژگیهای مدل استفاده کنید.
$user = new User();
$user->name = 'jane doe';
echo $user->name; // Jane doe
5- روش قدیمی (ورژن 8 به قبل)
در روش قدیمی، برای تعریف Accessors و Mutators باید از متدهای
get{AttributeName}Attribute و set{AttributeName}Attribute
استفاده میکردید.
public function getNameAttribute($value)
{
return ucfirst($value);
}
public function setEmailAttribute($value)
{
$this->attributes['email'] = strtolower($value);
}
اما در استفاده با روش جدید یکسان است.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤8👍2
⚜️ دوره لاراول - قسمت پونزدهم
📚 مینی پروژه TODo App - دیتابیس و مدل ها
خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو استارت زدیم و نگاهی به فرانت انداختیم و دیتابیس رو دراوردیم و migration و model ها رو اوکی کردیم.
توی قسمت های بعدی میریم سراغ ادامه مینی پروژه....
🎞 لینک ویدیو:
https://youtu.be/0LpM4QDAkDw
🔗 Github Repo
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
📚 مینی پروژه TODo App - دیتابیس و مدل ها
خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو استارت زدیم و نگاهی به فرانت انداختیم و دیتابیس رو دراوردیم و migration و model ها رو اوکی کردیم.
توی قسمت های بعدی میریم سراغ ادامه مینی پروژه....
🎞 لینک ویدیو:
https://youtu.be/0LpM4QDAkDw
🔗 Github Repo
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
❤7
فصل چهار - مدلها و Eloquent ORM
بخش هفتم - Events
ایونت ها به شما اجازه میدهند تا قبل و بعد از رخ دادن عملیاتهای مختلفی روی مدلها (مانند ایجاد، بهروزرسانی، حذف و غیره) کدهای دلخواهی را اجرا کنید. این قابلیت به شما امکان میدهد تا فرآیندهایی مانند ثبت لاگها، ارسال اعلانها، اعتبارسنجیها و سایر عملیات وابسته به مدلها را بهصورت خودکار و در لحظه مدیریت کنید.
لاراول رویدادهای مختلفی را برای مدلها فراهم میکند که میتوانید آنها را در هر مرحله از چرخه حیات یک مدل استفاده کنید. این رویدادها به شما اجازه میدهند قبل یا بعد از عملیاتی مانند ایجاد، بهروزرسانی، حذف یا بازگردانی رکوردها، کدهای سفارشی خود را اجرا کنید.
لیست رویدادهای Eloquent
1- رویداد retrieved
بعد از اینکه یک مدل از دیتابیس بازیابی شد، اجرا میشود.
2- رویداد creating
قبل از ایجاد یک رکورد جدید در دیتابیس اجرا میشود.
3- رویداد created
بعد از ایجاد یک رکورد جدید اجرا میشود.
4- رویداد updating
قبل از بهروزرسانی یک رکورد اجرا میشود.
5- رویداد updated
بعد از بهروزرسانی یک رکورد اجرا میشود.
6- رویداد saving
قبل از ذخیرهشدن (چه ایجاد و چه بهروزرسانی) یک مدل اجرا میشود.
7- رویداد saved
بعد از ذخیرهشدن یک مدل اجرا میشود.
8- رویداد deleting
قبل از حذف یک رکورد اجرا میشود.
9- رویداد deleted
بعد از حذف یک رکورد اجرا میشود.
10- رویداد restoring
قبل از بازگردانی یک رکورد حذفشده اجرا میشود.
11- رویداد restored
بعد از بازگردانی یک رکورد حذفشده اجرا میشود.
12- رویداد trashed
بعد از soft delete شدن یک رکورد اجرا می شود.
13- رویداد forceDeleting
قبل از حذف کامل حتی با وجود soft delete اجرا می شود.
14- رویداد forceDeleted
بعد از حذف کامل حتی با وجود soft delete اجرا می شود.
15- رویداد replicating
قبل از replicate شدن یک رکورد اجرا می شود.
برای استفاده از رویدادها در Eloquent، شما میتوانید از متد boot() در مدل خود استفاده کنید و در آن رویدادهای دلخواه را تعریف کنید.
در این مثال:
در رویداد creating، لاگ مربوط به زمانی که یک کاربر جدید در حال ایجاد است ثبت میشود.
در رویداد created، لاگ مربوط به زمانی که یک کاربر با موفقیت ایجاد شد ثبت میشود.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش هفتم - Events
ایونت ها به شما اجازه میدهند تا قبل و بعد از رخ دادن عملیاتهای مختلفی روی مدلها (مانند ایجاد، بهروزرسانی، حذف و غیره) کدهای دلخواهی را اجرا کنید. این قابلیت به شما امکان میدهد تا فرآیندهایی مانند ثبت لاگها، ارسال اعلانها، اعتبارسنجیها و سایر عملیات وابسته به مدلها را بهصورت خودکار و در لحظه مدیریت کنید.
لاراول رویدادهای مختلفی را برای مدلها فراهم میکند که میتوانید آنها را در هر مرحله از چرخه حیات یک مدل استفاده کنید. این رویدادها به شما اجازه میدهند قبل یا بعد از عملیاتی مانند ایجاد، بهروزرسانی، حذف یا بازگردانی رکوردها، کدهای سفارشی خود را اجرا کنید.
لیست رویدادهای Eloquent
1- رویداد retrieved
بعد از اینکه یک مدل از دیتابیس بازیابی شد، اجرا میشود.
2- رویداد creating
قبل از ایجاد یک رکورد جدید در دیتابیس اجرا میشود.
3- رویداد created
بعد از ایجاد یک رکورد جدید اجرا میشود.
4- رویداد updating
قبل از بهروزرسانی یک رکورد اجرا میشود.
5- رویداد updated
بعد از بهروزرسانی یک رکورد اجرا میشود.
6- رویداد saving
قبل از ذخیرهشدن (چه ایجاد و چه بهروزرسانی) یک مدل اجرا میشود.
7- رویداد saved
بعد از ذخیرهشدن یک مدل اجرا میشود.
8- رویداد deleting
قبل از حذف یک رکورد اجرا میشود.
9- رویداد deleted
بعد از حذف یک رکورد اجرا میشود.
10- رویداد restoring
قبل از بازگردانی یک رکورد حذفشده اجرا میشود.
11- رویداد restored
بعد از بازگردانی یک رکورد حذفشده اجرا میشود.
12- رویداد trashed
بعد از soft delete شدن یک رکورد اجرا می شود.
13- رویداد forceDeleting
قبل از حذف کامل حتی با وجود soft delete اجرا می شود.
14- رویداد forceDeleted
بعد از حذف کامل حتی با وجود soft delete اجرا می شود.
15- رویداد replicating
قبل از replicate شدن یک رکورد اجرا می شود.
برای استفاده از رویدادها در Eloquent، شما میتوانید از متد boot() در مدل خود استفاده کنید و در آن رویدادهای دلخواه را تعریف کنید.
protected static function boot()
{
parent::boot();
static::creating(function ($user) {
Log::info('Creating new user: ' . $user->name);
});
static::created(function ($user) {
Log::info('New user Created: ' . $user->name);
});
}
در این مثال:
در رویداد creating، لاگ مربوط به زمانی که یک کاربر جدید در حال ایجاد است ثبت میشود.
در رویداد created، لاگ مربوط به زمانی که یک کاربر با موفقیت ایجاد شد ثبت میشود.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤4👍4
⚜️ دوره لاراول - قسمت شانزدهم
📚 مینی پروژه TODo App - سیستم احراز هویت
خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو یکمی جلوتر بردیم و بحث های ثبت نام ، ورود ، خروج از حساب و گرفتن اطلاعات کاربر رو توسعه دادیم...
توی قسمت های بعدی این مجموعه رو ادامه میدیم.
🎞 لینک ویدیو:
https://youtu.be/Gm1skaf3UyQ
🔗 Github Repo
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
📚 مینی پروژه TODo App - سیستم احراز هویت
خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو یکمی جلوتر بردیم و بحث های ثبت نام ، ورود ، خروج از حساب و گرفتن اطلاعات کاربر رو توسعه دادیم...
توی قسمت های بعدی این مجموعه رو ادامه میدیم.
🎞 لینک ویدیو:
https://youtu.be/Gm1skaf3UyQ
🔗 Github Repo
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
❤1👍1🔥1
فصل چهار - مدلها و Eloquent ORM
بخش هشتم - Observers
مشاهدهگرها یا Observer ها به عنوان کلاسهایی شناخته میشوند که برای نظارت بر رخدادهای مدلهای Eloquent طراحی شدهاند.
زمانی که میخواهید منطق خاصی را قبل یا بعد از رخ دادن یک عمل (مانند ایجاد، بهروزرسانی یا حذف یک رکورد) انجام دهید، میتوانید از Observerها استفاده کنید.
این امر منجر به جداسازی بهتر منطق بیزنسی از کنترلرها و مدلها و بهبود قابلیت نگهداری کد میشود.
لاراول اجازه میدهد تا به چندین رخداد پیشفرض مدل گوش دهید که با آنها در بخش قبل آشنا شدیم.
برای ایجاد یک Observer جدید میتوانید از دستور Artisan استفاده کنید:
این دستور یک کلاس به نام UserObserver میسازد و آن را با مدل User مرتبط میکند. پس از ایجاد، شما میتوانید متدهایی مانند created، updated و غیره را در آن تعریف کنید تا بر اساس رخدادها اجرا شوند.
فرض کنید میخواهیم زمانی که یک کاربر جدید ایجاد شد، یک پیام خوشآمدگویی برای او ارسال شود. ابتدا یک Observer برای مدل User ایجاد میکنیم.
در فایل app/Observers/UserObserver.php کدی مانند زیر را اضافه میکنیم:
متد created درواقع یک رخداد است که با لیست آنها در بخش قبل آشنا شده ایم، درنتیجه میتوان از هر یک از آنها بسته به نیاز به جای created استفاده کرد.
باید این Observer را در AppServiceProvider یا هر جای دیگری که مناسب است، ثبت کنید. این کار معمولاً در متد boot انجام میشود:
اکنون، هر بار که یک شیء جدید از مدل User ایجاد شود، متد created در UserObserver فراخوانی میشود و ایمیل خوشآمدگویی ارسال میشود.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش هشتم - Observers
مشاهدهگرها یا Observer ها به عنوان کلاسهایی شناخته میشوند که برای نظارت بر رخدادهای مدلهای Eloquent طراحی شدهاند.
زمانی که میخواهید منطق خاصی را قبل یا بعد از رخ دادن یک عمل (مانند ایجاد، بهروزرسانی یا حذف یک رکورد) انجام دهید، میتوانید از Observerها استفاده کنید.
این امر منجر به جداسازی بهتر منطق بیزنسی از کنترلرها و مدلها و بهبود قابلیت نگهداری کد میشود.
لاراول اجازه میدهد تا به چندین رخداد پیشفرض مدل گوش دهید که با آنها در بخش قبل آشنا شدیم.
برای ایجاد یک Observer جدید میتوانید از دستور Artisan استفاده کنید:
php artisan make:observer UserObserver --model=User
این دستور یک کلاس به نام UserObserver میسازد و آن را با مدل User مرتبط میکند. پس از ایجاد، شما میتوانید متدهایی مانند created، updated و غیره را در آن تعریف کنید تا بر اساس رخدادها اجرا شوند.
فرض کنید میخواهیم زمانی که یک کاربر جدید ایجاد شد، یک پیام خوشآمدگویی برای او ارسال شود. ابتدا یک Observer برای مدل User ایجاد میکنیم.
در فایل app/Observers/UserObserver.php کدی مانند زیر را اضافه میکنیم:
class UserObserver
{
public function created(User $user)
{
Mail::to($user->email)->send(new \App\Mail\WelcomeMail($user));
}
}
متد created درواقع یک رخداد است که با لیست آنها در بخش قبل آشنا شده ایم، درنتیجه میتوان از هر یک از آنها بسته به نیاز به جای created استفاده کرد.
باید این Observer را در AppServiceProvider یا هر جای دیگری که مناسب است، ثبت کنید. این کار معمولاً در متد boot انجام میشود:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
User::observe(UserObserver::class);
}
}
اکنون، هر بار که یک شیء جدید از مدل User ایجاد شود، متد created در UserObserver فراخوانی میشود و ایمیل خوشآمدگویی ارسال میشود.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤6👍2
فصل چهار - مدلها و Eloquent ORM
بخش نهم - Transactions
تراکنشها یا Transactionها برای انجام چندین عملیات پایگاه داده به صورت یکجا استفاده میشوند. به عبارت دیگر، اگر همه عملیات موفق باشند، تغییرات به پایگاه داده اعمال میشود، اما اگر یکی از عملیاتها با خطا مواجه شود، تمامی تغییرات لغو میشوند (rollback).
این موضوع به ویژه برای اطمینان از یکپارچگی دادهها در سناریوهایی که شامل چندین عملیات هستند مفید است، مانند ثبت چند جدول همزمان، مدیریت تراکنشهای بانکی و غیره.
لاراول برای مدیریت تراکنشها متدهایی را فراهم میکند که در فساد DB قرار دارند.
متد ها عبارتند از:
1- متد beginTransaction برای شروع یک تراکنش.
2- متد commit برای تأیید و ثبت تراکنش.
3- متد rollBack برای لغو تغییرات در صورت بروز خطا.
4- متد afterCommit برای انجام عملیات پس از commit.
مثال:
در ابتدا تراکنش با beginTransaction آغاز میشود.
دو عملیات insert در جدولهای مختلف انجام میشود.
اگر همه عملیات بدون خطا انجام شوند، با commit تغییرات ثبت میشود.
اگر خطا رخ دهد (مانند ارور در هر یک از عملیات)، با استفاده از catch خطا مدیریت شده و rollBack فراخوانی میشود تا تغییرات لغو شود.
لاراول همچنین یک متد سادهتر و قابل خواندنتر به نام transaction ارائه میدهد که میتوان کل تراکنش را در یک Closure قرار داد:
مثال:
اگر کد داخل transaction موفق باشد، تغییرات به صورت خودکار ذخیره (commit) میشود.
در صورت بروز خطا، تغییرات به صورت خودکار لغو (rollback) میشوند.
این متد علاوه بر اجرای کد در قالب تراکنش، تعداد دفعاتی که باید در صورت مواجهه با خطا مجدد تلاش کند را میپذیرد. این ویژگی برای مواقعی که با عملیاتهای رقابتی روبرو هستید (مانند lockها یا عملیات با احتمال تعارض) مفید است.
متد afterCommit به شما امکان میدهد که یک callback یا عملیات خاص را پس از موفقیتآمیز بودن commit اجرا کنید. برای مثال، میتوانید پس از ذخیره تغییرات، رویدادهایی مثل ارسال ایمیل را انجام دهید.
میتوانید از پارامترهایی برای کنترل تراکنش استفاده کنید. به عنوان مثال، تنظیم چندین تراکنش تو در تو (nested transactions) نیز در لاراول امکانپذیر است.
تراکنشها در سناریوهایی مانند عملیات مالی، مدیریت سفارشات یا عملیاتهای مربوط به موجودی کالا اهمیت زیادی دارند. با استفاده از آنها میتوانید از ناسازگاری دادهها و بروز اشکالات جدی در پایگاه داده جلوگیری کنید.
به طور خلاصه، تراکنشها در لاراول به شما امکان میدهند عملیات مختلف پایگاه داده را به صورت امن انجام دهید، به طوری که در صورت بروز خطا همه تغییرات برگردانده شود.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش نهم - Transactions
تراکنشها یا Transactionها برای انجام چندین عملیات پایگاه داده به صورت یکجا استفاده میشوند. به عبارت دیگر، اگر همه عملیات موفق باشند، تغییرات به پایگاه داده اعمال میشود، اما اگر یکی از عملیاتها با خطا مواجه شود، تمامی تغییرات لغو میشوند (rollback).
این موضوع به ویژه برای اطمینان از یکپارچگی دادهها در سناریوهایی که شامل چندین عملیات هستند مفید است، مانند ثبت چند جدول همزمان، مدیریت تراکنشهای بانکی و غیره.
لاراول برای مدیریت تراکنشها متدهایی را فراهم میکند که در فساد DB قرار دارند.
متد ها عبارتند از:
1- متد beginTransaction برای شروع یک تراکنش.
2- متد commit برای تأیید و ثبت تراکنش.
3- متد rollBack برای لغو تغییرات در صورت بروز خطا.
4- متد afterCommit برای انجام عملیات پس از commit.
مثال:
try {
DB::beginTransaction();
DB::table('users')->insert([
'name' => 'John',
'email' => 'john@example.com',
'password' => bcrypt('1234')
]);
DB::table('profiles')->insert([
'user_id' => 1,
'bio' => 'Test Bio',
'age' => 25
]);
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
echo "Error: " . $e->getMessage();
}
در ابتدا تراکنش با beginTransaction آغاز میشود.
دو عملیات insert در جدولهای مختلف انجام میشود.
اگر همه عملیات بدون خطا انجام شوند، با commit تغییرات ثبت میشود.
اگر خطا رخ دهد (مانند ارور در هر یک از عملیات)، با استفاده از catch خطا مدیریت شده و rollBack فراخوانی میشود تا تغییرات لغو شود.
لاراول همچنین یک متد سادهتر و قابل خواندنتر به نام transaction ارائه میدهد که میتوان کل تراکنش را در یک Closure قرار داد:
مثال:
DB::transaction(function () {
DB::table('users')->insert([
'name' => 'John',
'email' => 'john@example.com',
'password' => bcrypt('1234')
]);
DB::table('profiles')->insert([
'user_id' => 2,
'bio' => 'Test Bio',
'age' => 30
]);
})
اگر کد داخل transaction موفق باشد، تغییرات به صورت خودکار ذخیره (commit) میشود.
در صورت بروز خطا، تغییرات به صورت خودکار لغو (rollback) میشوند.
این متد علاوه بر اجرای کد در قالب تراکنش، تعداد دفعاتی که باید در صورت مواجهه با خطا مجدد تلاش کند را میپذیرد. این ویژگی برای مواقعی که با عملیاتهای رقابتی روبرو هستید (مانند lockها یا عملیات با احتمال تعارض) مفید است.
DB::transaction(function () {
//
}, 3)
متد afterCommit به شما امکان میدهد که یک callback یا عملیات خاص را پس از موفقیتآمیز بودن commit اجرا کنید. برای مثال، میتوانید پس از ذخیره تغییرات، رویدادهایی مثل ارسال ایمیل را انجام دهید.
DB::afterCommit(function () {
echo "Success";
});
میتوانید از پارامترهایی برای کنترل تراکنش استفاده کنید. به عنوان مثال، تنظیم چندین تراکنش تو در تو (nested transactions) نیز در لاراول امکانپذیر است.
تراکنشها در سناریوهایی مانند عملیات مالی، مدیریت سفارشات یا عملیاتهای مربوط به موجودی کالا اهمیت زیادی دارند. با استفاده از آنها میتوانید از ناسازگاری دادهها و بروز اشکالات جدی در پایگاه داده جلوگیری کنید.
به طور خلاصه، تراکنشها در لاراول به شما امکان میدهند عملیات مختلف پایگاه داده را به صورت امن انجام دهید، به طوری که در صورت بروز خطا همه تغییرات برگردانده شود.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤6👍1
فصل چهار - مدلها و Eloquent ORM
بخش دهم - Route Model Binding
Route Model Binding به ما اجازه میدهد تا به صورت مستقیم و خودکار مدلهای لاراول را از URL به دست آوریم و در کنترلر استفاده کنیم. به عنوان مثال، اگر یک Post داریم و بخواهیم یک پست خاص را با استفاده از شناسه (ID) در URL بازیابی کنیم، معمولاً بدون استفاده از این ویژگی کدی شبیه به زیر مینویسیم:
اما با استفاده از Route Model Binding میتوانیم کد را سادهتر کنیم:
لاراول از مقدار {post} در مسیر استفاده میکند تا مدل Post را بر اساس مقدار (به طور پیشفرض id) جستجو کرده و به کنترلر ارسال کند.
نکته: این قابلیت برای انواع مدلها قابل استفاده است و شما میتوانید از Custom Keyها نیز استفاده کنید.
همانطور که توضیح داده شد، {post} به طور پیشفرض بر اساس فیلد id جست و جو می کند، اما میتوانید به سادگی فیلد پیشفرض را تغییر دهید:
در کد بالا به جای {post}، از {post:slug} استفاده شده، به این معنی که از فیلد slug برای جست و جو استفاده شود، میتوانید فیلد مورد نظر را به جای slug بنویسید.
همچنین میتوانید فیلد پیشفرض را در مدل تغییر دهید:
در این صورت با نوشتن {post} به طور پیشفرض از فیلد slug برای جست و جو استفاده می شود.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش دهم - Route Model Binding
Route Model Binding به ما اجازه میدهد تا به صورت مستقیم و خودکار مدلهای لاراول را از URL به دست آوریم و در کنترلر استفاده کنیم. به عنوان مثال، اگر یک Post داریم و بخواهیم یک پست خاص را با استفاده از شناسه (ID) در URL بازیابی کنیم، معمولاً بدون استفاده از این ویژگی کدی شبیه به زیر مینویسیم:
Route::get('/posts/{id}', function($id) {
$post = Post::findOrFail($id);
return view('posts.show', compact('post'));
});
اما با استفاده از Route Model Binding میتوانیم کد را سادهتر کنیم:
Route::get('/posts/{post}', function(Post $post) {
return view('posts.show', compact('post'));
});
لاراول از مقدار {post} در مسیر استفاده میکند تا مدل Post را بر اساس مقدار (به طور پیشفرض id) جستجو کرده و به کنترلر ارسال کند.
نکته: این قابلیت برای انواع مدلها قابل استفاده است و شما میتوانید از Custom Keyها نیز استفاده کنید.
همانطور که توضیح داده شد، {post} به طور پیشفرض بر اساس فیلد id جست و جو می کند، اما میتوانید به سادگی فیلد پیشفرض را تغییر دهید:
Route::get('/posts/{post:slug}', function(Post $post) {
return view('posts.show', compact('post'));
});
در کد بالا به جای {post}، از {post:slug} استفاده شده، به این معنی که از فیلد slug برای جست و جو استفاده شود، میتوانید فیلد مورد نظر را به جای slug بنویسید.
همچنین میتوانید فیلد پیشفرض را در مدل تغییر دهید:
class Post extends Model
{
public function getRouteKeyName()
{
return 'slug';
}
}
در این صورت با نوشتن {post} به طور پیشفرض از فیلد slug برای جست و جو استفاده می شود.
🔖 #Laravel, #PHP, #لاراول, #فصل_۴
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤7👍2
فصل پنج - Migrations and Database
بخش اول - تعریف و اجرای Migrationها
در لاراول، Migrations یک سیستم برای مدیریت و ایجاد تغییرات در ساختار پایگاه داده است. این سیستم به توسعهدهندگان امکان میدهد تا جدولها، ستونها و روابط پایگاه داده را با استفاده از کد PHP تعریف، تغییر و مدیریت کنند. با استفاده از مایگریشن ها، تغییرات در پایگاه داده در کنار کد پروژه نگهداری میشود و میتوان آن را بهراحتی در محیطهای مختلف بهروزرسانی کرد.
اهداف و مزایای استفاده از مایگریشنها
1- مایگریشن ها به شما این امکان را میدهند که تغییرات پایگاه داده را با تغییرات کد هماهنگ کنید.
2- بهراحتی میتوانید تغییرات اعمال شده را به نسخه قبلی برگردانید.
3- وقتی توسعهدهندگان مختلف روی یک پروژه کار میکنند، میتوانند تغییرات پایگاه داده را بهصورت کنترلشده و منظم در بین خودشان به اشتراک بگذارند.
4- بهجای ویرایش دستی پایگاه داده، میتوانید از دستورات ساده برای افزودن یا تغییر جداول استفاده کنید.
ایجاد و اجرای مایگریشن
برای ایجاد مایگریشن جدید، میتوانید از دستور Artisan زیر استفاده کنید:
فلگ --create بیانگر این است که مایگریشن برای ساخت جدول جدید می باشد.
این دستور یک فایل مایگریشن جدید در پوشه database/migrations ایجاد میکند. در فایل مایگریشن معمولاً دو متد اصلی وجود دارد:
1- متد up
شامل دستوراتی برای ایجاد یا تغییر ساختار جدول (افزودن ستونها، روابط و غیره) است.
2- متد down
شامل دستوراتی برای بازگردانی تغییرات اعمالشده در متد up() است.
ساختار یک فایل مایگریشن
یک مایگریشن نمونه، به شکل زیر است:
اجرای مهاجرتها
برای اجرای مایگریشنها و اعمال تغییرات روی پایگاه داده از دستور زیر استفاده میشود:
این دستور تمامی مایگریشنهایی که هنوز اجرا نشدهاند را اعمال میکند. برای بازگرداندن آخرین سری از تغییرات میتوانید از دستور زیر استفاده کنید:
برای بازگرداندن تمامی تغییرات و شروع از ابتدا:
سایر دستورات در پست مربوطه توضیح داده می شود.
تغییرات در جداول موجود
اگر بخواهید تغییراتی در جداول موجود اعمال کنید، باید از مایگریشن جدیدی استفاده کنید. مثلاً برای افزودن ستون به جدول users میتوانید از دستور زیر بهره ببرید:
فلگ --table بیانگر این است که مایگریشن برای ویرایش جدول موجود می باشد.
سپس در فایل مایگریشن ایجادشده میتوانید تغییرات خود را اعمال کنید.
اصول نامگذاری مایگریشنها
انتخاب نامهای مناسب برای مایگریشنها از اهمیت ویژهای برخوردار است، زیرا نه تنها باعث خوانایی و شفافیت کد میشود، بلکه به وضوح نقش و وظیفهی هر مایگریشن را مشخص میکند. لاراول از نام فایلها و کلاسهای مایگریشن برای سازماندهی و اجرای صحیح آنها استفاده میکند.
1- نام مایگریشن باید عملی که انجام میدهد را توصیف کند. به عنوان مثال:
create_users_table
add_email_to_users_table
remove_phone_from_users_table
update_orders_status
2- نام مایگریشن معمولاً با فعلی که عمل اصلی را توصیف میکند شروع میشود، سپس به اسم جدول یا ستون مورد نظر اشاره میکند. این قالب باعث شفافیت بیشتر میشود و به راحتی میتوان فهمید که مایگریشن چه کاری انجام میدهد.
3- هنگام اشاره به جداول، معمولاً از نامهای جمع استفاده میشود. برای مثال، مایگریشن مربوط به جدول کاربران به صورت create_users_table نامگذاری میشود و نه create_user_table.
4- سعی کنید از نامهای طولانی و زائد پرهیز کنید. نامها باید توصیفی و مختصر باشند. برای مثال، به جای add_new_email_column_to_users_table میتوانید از add_email_to_users_table استفاده کنید.
5- برای نامگذاری فایلها و کلاسهای مایگریشن از قالب snake_case استفاده میشود، که بین کلمات از خط زیرین _ استفاده میکند. این قالب بهطور پیشفرض توسط دستور php artisan make:migration رعایت میشود.
در قسمت بعدی با متد های ساخت جداول به وسیله ی مایگریشن ها آشنا می شویم.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش اول - تعریف و اجرای Migrationها
در لاراول، Migrations یک سیستم برای مدیریت و ایجاد تغییرات در ساختار پایگاه داده است. این سیستم به توسعهدهندگان امکان میدهد تا جدولها، ستونها و روابط پایگاه داده را با استفاده از کد PHP تعریف، تغییر و مدیریت کنند. با استفاده از مایگریشن ها، تغییرات در پایگاه داده در کنار کد پروژه نگهداری میشود و میتوان آن را بهراحتی در محیطهای مختلف بهروزرسانی کرد.
اهداف و مزایای استفاده از مایگریشنها
1- مایگریشن ها به شما این امکان را میدهند که تغییرات پایگاه داده را با تغییرات کد هماهنگ کنید.
2- بهراحتی میتوانید تغییرات اعمال شده را به نسخه قبلی برگردانید.
3- وقتی توسعهدهندگان مختلف روی یک پروژه کار میکنند، میتوانند تغییرات پایگاه داده را بهصورت کنترلشده و منظم در بین خودشان به اشتراک بگذارند.
4- بهجای ویرایش دستی پایگاه داده، میتوانید از دستورات ساده برای افزودن یا تغییر جداول استفاده کنید.
ایجاد و اجرای مایگریشن
برای ایجاد مایگریشن جدید، میتوانید از دستور Artisan زیر استفاده کنید:
php artisan make:migration create_users_table --create=users
فلگ --create بیانگر این است که مایگریشن برای ساخت جدول جدید می باشد.
این دستور یک فایل مایگریشن جدید در پوشه database/migrations ایجاد میکند. در فایل مایگریشن معمولاً دو متد اصلی وجود دارد:
1- متد up
شامل دستوراتی برای ایجاد یا تغییر ساختار جدول (افزودن ستونها، روابط و غیره) است.
2- متد down
شامل دستوراتی برای بازگردانی تغییرات اعمالشده در متد up() است.
ساختار یک فایل مایگریشن
یک مایگریشن نمونه، به شکل زیر است:
return new class extends Migration
{
public function up(): void
{
Schema::create('flights', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('airline');
$table->timestamps();
});
}
public function down(): void
{
Schema::drop('flights');
}
};
اجرای مهاجرتها
برای اجرای مایگریشنها و اعمال تغییرات روی پایگاه داده از دستور زیر استفاده میشود:
php artisan migrate
این دستور تمامی مایگریشنهایی که هنوز اجرا نشدهاند را اعمال میکند. برای بازگرداندن آخرین سری از تغییرات میتوانید از دستور زیر استفاده کنید:
php artisan migrate:rollback
برای بازگرداندن تمامی تغییرات و شروع از ابتدا:
php artisan migrate:reset
سایر دستورات در پست مربوطه توضیح داده می شود.
تغییرات در جداول موجود
اگر بخواهید تغییراتی در جداول موجود اعمال کنید، باید از مایگریشن جدیدی استفاده کنید. مثلاً برای افزودن ستون به جدول users میتوانید از دستور زیر بهره ببرید:
php artisan make:migration add_phone_to_users_table --table=users
فلگ --table بیانگر این است که مایگریشن برای ویرایش جدول موجود می باشد.
سپس در فایل مایگریشن ایجادشده میتوانید تغییرات خود را اعمال کنید.
اصول نامگذاری مایگریشنها
انتخاب نامهای مناسب برای مایگریشنها از اهمیت ویژهای برخوردار است، زیرا نه تنها باعث خوانایی و شفافیت کد میشود، بلکه به وضوح نقش و وظیفهی هر مایگریشن را مشخص میکند. لاراول از نام فایلها و کلاسهای مایگریشن برای سازماندهی و اجرای صحیح آنها استفاده میکند.
1- نام مایگریشن باید عملی که انجام میدهد را توصیف کند. به عنوان مثال:
create_users_table
add_email_to_users_table
remove_phone_from_users_table
update_orders_status
2- نام مایگریشن معمولاً با فعلی که عمل اصلی را توصیف میکند شروع میشود، سپس به اسم جدول یا ستون مورد نظر اشاره میکند. این قالب باعث شفافیت بیشتر میشود و به راحتی میتوان فهمید که مایگریشن چه کاری انجام میدهد.
3- هنگام اشاره به جداول، معمولاً از نامهای جمع استفاده میشود. برای مثال، مایگریشن مربوط به جدول کاربران به صورت create_users_table نامگذاری میشود و نه create_user_table.
4- سعی کنید از نامهای طولانی و زائد پرهیز کنید. نامها باید توصیفی و مختصر باشند. برای مثال، به جای add_new_email_column_to_users_table میتوانید از add_email_to_users_table استفاده کنید.
5- برای نامگذاری فایلها و کلاسهای مایگریشن از قالب snake_case استفاده میشود، که بین کلمات از خط زیرین _ استفاده میکند. این قالب بهطور پیشفرض توسط دستور php artisan make:migration رعایت میشود.
در قسمت بعدی با متد های ساخت جداول به وسیله ی مایگریشن ها آشنا می شویم.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤5👍2
فصل پنج - Migrations and Database
بخش اول - تعریف و اجرای Migrationها
برای ساخت یک جدول ساده با استفاده از مایگریشن در لاراول، میتوانید مراحل زیر را انجام دهید:
ابتدا یک فایل مایگریشن جدید با دستور زیر ایجاد میکنیم:
این دستور یک فایل مایگریشن جدید به نام create_posts_table در پوشه database/migrations ایجاد میکند.
حالا میتوانید به فایل ایجاد شده مراجعه کنید و متد up() را ویرایش کنید تا جدول posts ساخته شود. به عنوان مثال:
مایگریشن بالا یک جدول با نام posts ایجاد میکند و 5 فیلد مشخص شده در متد up را در آن ایجاد میکند.
در نهایت، برای اجرای مایگریشن و ایجاد جدول در پایگاه داده، دستور زیر را اجرا کنید:
در ادامه متد های قابل استفاده برای ساخت جدول توضیح داده می شود.
در این قسمت با یک فساد جدید به نام Schema آشنا می شویم، این فساد برای تعریف، ایجاد، تغییر و حذف جداول و ستونهای پایگاه داده در مایگریشنها بهکار میرود.
1- متد create
این متد برای ایجاد یک جدول جدید استفاده میشود. درون این متد، میتوان با استفاده از کلاس Blueprint ستونها و ویژگیهای جدول را تعریف کرد.
2- متد table
این متد مشابه create اما برای تغییر ساختار یک جدول موجود استفاده میشود. میتوانید ستونها را اضافه، تغییر یا حذف کنید.
3- متد hasTable
این متد بررسی میکند که آیا جدول مشخصی در پایگاه داده وجود دارد یا خیر.
4- متد hasColumn
این متد بررسی میکند که آیا ستون خاصی در یک جدول مشخص وجود دارد یا خیر.
5- متد hasIndex
این متد بررسی میکند که آیا یک ایندکس (کلید یا شاخص) خاص در جدول موردنظر وجود دارد یا خیر. توجه داشته باشید که این متد ممکن است به همراه برخی نسخههای دیتابیسها یا پلهای خاص لاراول بیشتر کاربرد داشته باشد.
6- متد connection
این متد برای انجام عملیات Schema بر روی یک اتصال خاص پایگاه داده استفاده میشود. به شما اجازه میدهد با دیتابیسهای مختلفی کار کنید.
7- متد rename
این متد نام یک جدول را تغییر میدهد.
8- متد drop
این متد برای حذف کامل یک جدول استفاده میشود.
9- متد dropIfExists
این متد جدول را تنها در صورتی که وجود داشته باشد، حذف میکند. این رویکرد از بروز خطا در صورت عدم وجود جدول جلوگیری میکند.
10- متد enableForeignKeyConstraints
این متد، محدودیتهای کلید خارجی را در پایگاه داده فعال میکند. این متد معمولاً در سیستمهای مدیریت پایگاه داده مانند MySQL و SQLite مفید است.
11- متد disableForeignKeyConstraints
این متد، محدودیتهای کلید خارجی را در پایگاه داده غیرفعال میکند. غیرفعال کردن محدودیتها میتواند برای حذف جداول یا تغییر ساختار آنها (مانند حذف یا اضافه کردن ستونهای مرتبط) که ممکن است در حالت عادی باعث خطا شود، مفید باشد.
12- متد withoutForeignKeyConstraints
این متد یک Closure را اجرا میکند که در حین اجرای آن، محدودیتهای کلید خارجی به طور موقت غیرفعال میشوند. پس از پایان اجرای Closure، محدودیتها بهطور خودکار به حالت اولیه بازمیگردند.
در قسمت ها بعدی با متد کلاس Blueprint برای کار با column ها می پردازیم.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش اول - تعریف و اجرای Migrationها
برای ساخت یک جدول ساده با استفاده از مایگریشن در لاراول، میتوانید مراحل زیر را انجام دهید:
ابتدا یک فایل مایگریشن جدید با دستور زیر ایجاد میکنیم:
php artisan make:migration create_posts_table --create=posts
این دستور یک فایل مایگریشن جدید به نام create_posts_table در پوشه database/migrations ایجاد میکند.
حالا میتوانید به فایل ایجاد شده مراجعه کنید و متد up() را ویرایش کنید تا جدول posts ساخته شود. به عنوان مثال:
return new class extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('posts');
}
}
مایگریشن بالا یک جدول با نام posts ایجاد میکند و 5 فیلد مشخص شده در متد up را در آن ایجاد میکند.
در نهایت، برای اجرای مایگریشن و ایجاد جدول در پایگاه داده، دستور زیر را اجرا کنید:
php artisan migrate
در ادامه متد های قابل استفاده برای ساخت جدول توضیح داده می شود.
در این قسمت با یک فساد جدید به نام Schema آشنا می شویم، این فساد برای تعریف، ایجاد، تغییر و حذف جداول و ستونهای پایگاه داده در مایگریشنها بهکار میرود.
1- متد create
این متد برای ایجاد یک جدول جدید استفاده میشود. درون این متد، میتوان با استفاده از کلاس Blueprint ستونها و ویژگیهای جدول را تعریف کرد.
Schema::create('posts', function (Blueprint $table) {
//
});
2- متد table
این متد مشابه create اما برای تغییر ساختار یک جدول موجود استفاده میشود. میتوانید ستونها را اضافه، تغییر یا حذف کنید.
3- متد hasTable
این متد بررسی میکند که آیا جدول مشخصی در پایگاه داده وجود دارد یا خیر.
if (Schema::hasTable('posts')) {
//
}
4- متد hasColumn
این متد بررسی میکند که آیا ستون خاصی در یک جدول مشخص وجود دارد یا خیر.
if (Schema::hasColumn('posts', 'title')) {
//
}
5- متد hasIndex
این متد بررسی میکند که آیا یک ایندکس (کلید یا شاخص) خاص در جدول موردنظر وجود دارد یا خیر. توجه داشته باشید که این متد ممکن است به همراه برخی نسخههای دیتابیسها یا پلهای خاص لاراول بیشتر کاربرد داشته باشد.
if (Schema::hasIndex('posts', 'posts_title_index')) {
//
}
6- متد connection
این متد برای انجام عملیات Schema بر روی یک اتصال خاص پایگاه داده استفاده میشود. به شما اجازه میدهد با دیتابیسهای مختلفی کار کنید.
Schema::connection('sqlite')->create('products', function (Blueprint $table) {
//
});
7- متد rename
این متد نام یک جدول را تغییر میدهد.
Schema::rename('old_posts', 'new_posts');
8- متد drop
این متد برای حذف کامل یک جدول استفاده میشود.
Schema::drop('posts');
9- متد dropIfExists
این متد جدول را تنها در صورتی که وجود داشته باشد، حذف میکند. این رویکرد از بروز خطا در صورت عدم وجود جدول جلوگیری میکند.
10- متد enableForeignKeyConstraints
این متد، محدودیتهای کلید خارجی را در پایگاه داده فعال میکند. این متد معمولاً در سیستمهای مدیریت پایگاه داده مانند MySQL و SQLite مفید است.
Schema::enableForeignKeyConstraints();
11- متد disableForeignKeyConstraints
این متد، محدودیتهای کلید خارجی را در پایگاه داده غیرفعال میکند. غیرفعال کردن محدودیتها میتواند برای حذف جداول یا تغییر ساختار آنها (مانند حذف یا اضافه کردن ستونهای مرتبط) که ممکن است در حالت عادی باعث خطا شود، مفید باشد.
12- متد withoutForeignKeyConstraints
این متد یک Closure را اجرا میکند که در حین اجرای آن، محدودیتهای کلید خارجی به طور موقت غیرفعال میشوند. پس از پایان اجرای Closure، محدودیتها بهطور خودکار به حالت اولیه بازمیگردند.
Schema::withoutForeignKeyConstraints(function () {
Schema::dropIfExists('posts');
});
در قسمت ها بعدی با متد کلاس Blueprint برای کار با column ها می پردازیم.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤4👍3
فصل پنج - Migrations and Database
بخش اول - تعریف و اجرای Migrationها
کلاس Blueprint در لاراول به عنوان ابزاری در مایگریشنها استفاده میشود که امکان تعریف، تغییر و حذف ستونها و ویژگیهای جداول پایگاه داده را فراهم میکند. این کلاس همراه با متدهای Schema به کار میرود و مجموعهای از متدها را برای مدیریت ستونها و ایندکسها ارائه میدهد.
مثال:
در این مثال، کلاس Blueprint برای تعریف ساختار جدول users استفاده شده است. این جدول دارای سه ستون اصلی است.
از این قسمت به بررسی و توضیح متد های مدیریت جداول می پردازیم.
1- متد bigIncrements
این متد یک ستون کلید اصلی با نوع داده BIGINT ایجاد میکند که مقدار آن به صورت AUTO_INCREMENT خواهد بود.
2- متد bigInteger
این متد یک ستون عدد صحیح بزرگ (BIGINT) ایجاد میکند که میتواند برای ذخیره اعداد بزرگ استفاده شود.
3- متد binary
این متد یک ستون با نوع داده باینری برای ذخیره دادههای خام (مانند فایلها) ایجاد میکند.
4- متد boolean
این متد یک ستون Boolean ایجاد میکند که برای ذخیره مقادیر منطقی استفاده میشود.
5- متد char
این متد یک ستون متنی با طول ثابت ایجاد میکند.
6- متد dateTimeTz
این متد یک ستون تاریخ و زمان با پشتیبانی از منطقه زمانی (timezone) ایجاد میکند.
7- متد dateTime
این متد یک ستون تاریخ و زمان بدون منطقه زمانی ایجاد میکند.
8- متد date
این متد یک ستون برای ذخیره تنها تاریخ (بدون زمان) ایجاد میکند.
9- متد decimal
این متد یک ستون عددی دقیق با نقطه اعشار ایجاد میکند.
در این مثال، ستون price برای ذخیره اعداد با حداکثر 10 رقم و 2 رقم اعشار ایجاد میشود.
10- متد double
این متد یک ستون عددی با دقت شناور (دقت کمتر از decimal) ایجاد میکند.
11- متد enum
این متد یک ستون از نوع ENUM ایجاد میکند که مقادیر آن باید از مجموعهای از مقادیر از پیش تعریفشده باشد.
12- متد float
ایجاد ستون عددی شناور (مانند double) که برای اعداد تقریبی مناسب است.
13- متد foreignId
ایجاد ستون عددی برای استفاده به عنوان کلید خارجی، معمولاً با نام id جدول مرجع.
14- متد foreignIdFor
ایجاد ستون کلید خارجی و مشخص کردن کلاس مدل مرجع.
15- متد foreignUlid
ایجاد کلید خارجی با نوع ULID.
16- متد foreignUuid
ایجاد کلید خارجی از نوع UUID.
17- متد geography
ایجاد ستون جغرافیایی برای ذخیره دادههای مکانی (مانند طول و عرض جغرافیایی).
18- متد geometry
ایجاد ستون هندسی برای ذخیره دادههای مکانی.
19- متد id
ایجاد ستون کلید اصلی به صورت خودکار.
20- متد increments
ایجاد کلید اصلی AUTO_INCREMENT از نوع INT.
21- متد integer
ایجاد ستون عدد صحیح.
22- متد ipAddress
ایجاد ستونی برای ذخیره آدرس IP.
23- متد json
ایجاد ستون برای ذخیره دادههای JSON.
24- متد jsonb
مشابه json، اما برای دیتابیسهای پشتیبانیکننده از نوع JSONB (مانند PostgreSQL) استفاده میشود.
25- متد longText
ایجاد ستون متنی طولانی.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش اول - تعریف و اجرای Migrationها
کلاس Blueprint در لاراول به عنوان ابزاری در مایگریشنها استفاده میشود که امکان تعریف، تغییر و حذف ستونها و ویژگیهای جداول پایگاه داده را فراهم میکند. این کلاس همراه با متدهای Schema به کار میرود و مجموعهای از متدها را برای مدیریت ستونها و ایندکسها ارائه میدهد.
مثال:
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
});
در این مثال، کلاس Blueprint برای تعریف ساختار جدول users استفاده شده است. این جدول دارای سه ستون اصلی است.
از این قسمت به بررسی و توضیح متد های مدیریت جداول می پردازیم.
1- متد bigIncrements
این متد یک ستون کلید اصلی با نوع داده BIGINT ایجاد میکند که مقدار آن به صورت AUTO_INCREMENT خواهد بود.
$table->bigIncrements('id');
2- متد bigInteger
این متد یک ستون عدد صحیح بزرگ (BIGINT) ایجاد میکند که میتواند برای ذخیره اعداد بزرگ استفاده شود.
$table->bigInteger('views');
3- متد binary
این متد یک ستون با نوع داده باینری برای ذخیره دادههای خام (مانند فایلها) ایجاد میکند.
$table->binary('file_data', length: 16, fixed: true);
4- متد boolean
این متد یک ستون Boolean ایجاد میکند که برای ذخیره مقادیر منطقی استفاده میشود.
$table->boolean('is_active');
5- متد char
این متد یک ستون متنی با طول ثابت ایجاد میکند.
$table->char('code', length: 10);
6- متد dateTimeTz
این متد یک ستون تاریخ و زمان با پشتیبانی از منطقه زمانی (timezone) ایجاد میکند.
$table->dateTimeTz('start_time', precision: 0);
7- متد dateTime
این متد یک ستون تاریخ و زمان بدون منطقه زمانی ایجاد میکند.
$table->dateTime('created_at', precision: 0);
8- متد date
این متد یک ستون برای ذخیره تنها تاریخ (بدون زمان) ایجاد میکند.
$table->date('birth_date');
9- متد decimal
این متد یک ستون عددی دقیق با نقطه اعشار ایجاد میکند.
$table->decimal('price', total: 10, places: 2);
در این مثال، ستون price برای ذخیره اعداد با حداکثر 10 رقم و 2 رقم اعشار ایجاد میشود.
10- متد double
این متد یک ستون عددی با دقت شناور (دقت کمتر از decimal) ایجاد میکند.
$table->double('rating');
11- متد enum
این متد یک ستون از نوع ENUM ایجاد میکند که مقادیر آن باید از مجموعهای از مقادیر از پیش تعریفشده باشد.
$table->enum('status', ['pending', 'approved', 'rejected']);
12- متد float
ایجاد ستون عددی شناور (مانند double) که برای اعداد تقریبی مناسب است.
$table->float('amount', precision: 53);
13- متد foreignId
ایجاد ستون عددی برای استفاده به عنوان کلید خارجی، معمولاً با نام id جدول مرجع.
$table->foreignId('user_id');
14- متد foreignIdFor
ایجاد ستون کلید خارجی و مشخص کردن کلاس مدل مرجع.
$table->foreignIdFor(User::class);
15- متد foreignUlid
ایجاد کلید خارجی با نوع ULID.
$table->foreignUlid('user_id');
16- متد foreignUuid
ایجاد کلید خارجی از نوع UUID.
$table->foreignUuid('user_id');
17- متد geography
ایجاد ستون جغرافیایی برای ذخیره دادههای مکانی (مانند طول و عرض جغرافیایی).
$table->geography('coordinates', subtype: 'point', srid: 4326);
18- متد geometry
ایجاد ستون هندسی برای ذخیره دادههای مکانی.
$table->geometry('positions', subtype: 'point', srid: 0);
19- متد id
ایجاد ستون کلید اصلی به صورت خودکار.
$table->id();
20- متد increments
ایجاد کلید اصلی AUTO_INCREMENT از نوع INT.
$table->increments('id');
21- متد integer
ایجاد ستون عدد صحیح.
$table->integer('votes');
22- متد ipAddress
ایجاد ستونی برای ذخیره آدرس IP.
$table->ipAddress('visitor');
23- متد json
ایجاد ستون برای ذخیره دادههای JSON.
$table->json('options');
24- متد jsonb
مشابه json، اما برای دیتابیسهای پشتیبانیکننده از نوع JSONB (مانند PostgreSQL) استفاده میشود.
$table->jsonb('options');
25- متد longText
ایجاد ستون متنی طولانی.
$table->longText('description');
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤5👍1
فصل پنج - Migrations and Database
بخش اول - تعریف و اجرای Migrationها
1- متد macAddress
ایجاد ستونی برای ذخیره آدرس MAC.
2- متد mediumIncrements
ایجاد کلید اصلی AUTO_INCREMENT از نوع MEDIUMINT.
3- متد mediumInteger
ایجاد ستون عدد صحیح از نوع MEDIUMINT.
4- متد mediumText
ایجاد ستون متنی از نوع MEDIUMTEXT.
5- متد morphs
این متد دو ستون morphable_id (عدد صحیح) و morphable_type (متن) برای پیادهسازی روابط چندشکلی (polymorphic) ایجاد میکند.
در این مثال، ستونهای commentable_id و commentable_type برای رابطه چندشکلی ایجاد میشوند.
6- متد nullableMorphs
مشابه morphs، اما ستونها به صورت nullable تعریف میشوند.
7- متد nullableTimestamps
ایجاد دو ستون created_at و updated_at که میتوانند nullable باشند.
8- متد nullableUlidMorphs
مشابه nullableMorphs، اما ستونهای کلید خارجی از نوع ULID هستند و nullable تعریف میشوند.
9- متد nullableUuidMorphs
مشابه nullableMorphs، اما ستونها از نوع UUID هستند و nullable تعریف میشوند.
10- متد rememberToken
ایجاد ستونی به نام remember_token برای مدیریت توکنهای احراز هویت.
11- متد set
ایجاد ستونی از نوع SET که میتواند شامل یک یا چند مقدار از یک مجموعه مشخص باشد.
12- متد smallIncrements
ایجاد کلید اصلی AUTO_INCREMENT از نوع SMALLINT.
13- متد smallInteger
ایجاد ستون عدد صحیح از نوع SMALLINT.
14- متد softDeletesTz
ایجاد ستونی برای Soft Delete با پشتیبانی از منطقه زمانی.
15- متد softDeletes
ایجاد ستونی برای Soft Delete بدون منطقه زمانی.
16- متد string
ایجاد ستونی متنی (رشتهای).
17- متد text
ایجاد ستونی متنی طولانی.
18- متد timeTz
ایجاد ستونی برای ذخیره زمان همراه با منطقه زمانی.
19- متد time
ایجاد ستونی برای ذخیره زمان بدون منطقه زمانی.
20- متد timestampTz
ایجاد ستونی برای ذخیره تایماستمپ همراه با منطقه زمانی.
21- متد timestamp
ایجاد ستونی برای ذخیره تایماستمپ بدون منطقه زمانی.
22- متد timestampsTz
ایجاد دو ستون created_at و updated_at همراه با منطقه زمانی.
23- متد timestamps
ایجاد دو ستون created_at و updated_at بدون منطقه زمانی.
24- متد tinyIncrements
ایجاد کلید اصلی AUTO_INCREMENT از نوع TINYINT.
25- متد tinyInteger
ایجاد ستون عدد صحیح کوچک از نوع TINYINT.
26- متد tinyText
ایجاد ستون متنی کوچک (حداکثر 255 کاراکتر).
27- متد unsignedBigInteger
ایجاد ستون BIGINT بدون علامت.
28- متد unsignedInteger
ایجاد ستون INT بدون علامت.
29- متد unsignedMediumInteger
ایجاد ستون MEDIUMINT بدون علامت.
30- متد unsignedSmallInteger
ایجاد ستون SMALLINT بدون علامت.
31- متد unsignedTinyInteger
ایجاد ستون TINYINT بدون علامت.
32- متد ulidMorphs
ایجاد ستونهای رابطه چندشکلی (morphable_id و morphable_type) از نوع ULID.
33- متد uuidMorphs
ایجاد ستونهای رابطه چندشکلی (morphable_id و morphable_type) از نوع UUID.
34- متد ulid
ایجاد ستونی از نوع ULID برای ذخیره شناسههای یکتا.
35- متد uuid
ایجاد ستونی از نوع UUID برای ذخیره شناسههای یکتا.
36- متد vector
ایجاد ستونی برای ذخیره دادههای برداری (Vector Data). این متد معمولاً برای ذخیره دادههای پیچیده مانند مدلهای یادگیری ماشینی استفاده میشود.
37- متد year
ایجاد ستونی برای ذخیره سال (از نوع YEAR).
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش اول - تعریف و اجرای Migrationها
1- متد macAddress
ایجاد ستونی برای ذخیره آدرس MAC.
$table->macAddress('device_mac');
2- متد mediumIncrements
ایجاد کلید اصلی AUTO_INCREMENT از نوع MEDIUMINT.
$table->mediumIncrements('id');
3- متد mediumInteger
ایجاد ستون عدد صحیح از نوع MEDIUMINT.
4- متد mediumText
ایجاد ستون متنی از نوع MEDIUMTEXT.
$table->mediumText('summary');
5- متد morphs
این متد دو ستون morphable_id (عدد صحیح) و morphable_type (متن) برای پیادهسازی روابط چندشکلی (polymorphic) ایجاد میکند.
$table->morphs('commentable');
در این مثال، ستونهای commentable_id و commentable_type برای رابطه چندشکلی ایجاد میشوند.
6- متد nullableMorphs
مشابه morphs، اما ستونها به صورت nullable تعریف میشوند.
$table->nullableMorphs('taggable');
7- متد nullableTimestamps
ایجاد دو ستون created_at و updated_at که میتوانند nullable باشند.
$table->nullableTimestamps(precision: 0);
8- متد nullableUlidMorphs
مشابه nullableMorphs، اما ستونهای کلید خارجی از نوع ULID هستند و nullable تعریف میشوند.
$table->nullableUlidMorphs('taggable');
9- متد nullableUuidMorphs
مشابه nullableMorphs، اما ستونها از نوع UUID هستند و nullable تعریف میشوند.
10- متد rememberToken
ایجاد ستونی به نام remember_token برای مدیریت توکنهای احراز هویت.
$table->rememberToken();
11- متد set
ایجاد ستونی از نوع SET که میتواند شامل یک یا چند مقدار از یک مجموعه مشخص باشد.
$table->set('flavors', ['strawberry', 'vanilla']);
12- متد smallIncrements
ایجاد کلید اصلی AUTO_INCREMENT از نوع SMALLINT.
$table->smallIncrements('id');
13- متد smallInteger
ایجاد ستون عدد صحیح از نوع SMALLINT.
14- متد softDeletesTz
ایجاد ستونی برای Soft Delete با پشتیبانی از منطقه زمانی.
$table->softDeletesTz('deleted_at', precision: 0);
15- متد softDeletes
ایجاد ستونی برای Soft Delete بدون منطقه زمانی.
16- متد string
ایجاد ستونی متنی (رشتهای).
$table->string('name', length: 100);
17- متد text
ایجاد ستونی متنی طولانی.
$table->text('description');
18- متد timeTz
ایجاد ستونی برای ذخیره زمان همراه با منطقه زمانی.
$table->timeTz('sunrise', precision: 0);
19- متد time
ایجاد ستونی برای ذخیره زمان بدون منطقه زمانی.
20- متد timestampTz
ایجاد ستونی برای ذخیره تایماستمپ همراه با منطقه زمانی.
$table->timestampTz('added_at', precision: 0);
21- متد timestamp
ایجاد ستونی برای ذخیره تایماستمپ بدون منطقه زمانی.
22- متد timestampsTz
ایجاد دو ستون created_at و updated_at همراه با منطقه زمانی.
$table->timestampsTz(precision: 0);
23- متد timestamps
ایجاد دو ستون created_at و updated_at بدون منطقه زمانی.
24- متد tinyIncrements
ایجاد کلید اصلی AUTO_INCREMENT از نوع TINYINT.
$table->tinyIncrements('id');
25- متد tinyInteger
ایجاد ستون عدد صحیح کوچک از نوع TINYINT.
26- متد tinyText
ایجاد ستون متنی کوچک (حداکثر 255 کاراکتر).
$table->tinyText('notes');
27- متد unsignedBigInteger
ایجاد ستون BIGINT بدون علامت.
$table->unsignedBigInteger('votes');
28- متد unsignedInteger
ایجاد ستون INT بدون علامت.
29- متد unsignedMediumInteger
ایجاد ستون MEDIUMINT بدون علامت.
30- متد unsignedSmallInteger
ایجاد ستون SMALLINT بدون علامت.
31- متد unsignedTinyInteger
ایجاد ستون TINYINT بدون علامت.
32- متد ulidMorphs
ایجاد ستونهای رابطه چندشکلی (morphable_id و morphable_type) از نوع ULID.
$table->ulidMorphs('taggable');
33- متد uuidMorphs
ایجاد ستونهای رابطه چندشکلی (morphable_id و morphable_type) از نوع UUID.
34- متد ulid
ایجاد ستونی از نوع ULID برای ذخیره شناسههای یکتا.
$table->ulid('id');
35- متد uuid
ایجاد ستونی از نوع UUID برای ذخیره شناسههای یکتا.
36- متد vector
ایجاد ستونی برای ذخیره دادههای برداری (Vector Data). این متد معمولاً برای ذخیره دادههای پیچیده مانند مدلهای یادگیری ماشینی استفاده میشود.
$table->vector('embedding', dimensions: 100);
37- متد year
ایجاد ستونی برای ذخیره سال (از نوع YEAR).
$table->year('birth_year');
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤7👍3
فصل پنج - Migrations and Database
بخش اول - تعریف و اجرای Migrationها
1- متد after
مشخص میکند که ستون باید بعد از ستون دیگری قرار گیرد.
این متد فقط برای برخی پایگاههای داده (مانند MySQL) پشتیبانی میشود.
2- متد autoIncrement
مشخص میکند که ستون به صورت AUTO_INCREMENT تعریف شود.
3- متد charset
تنظیم charset برای ستون.
4- متد collation
تنظیم collation برای ستون.
5- متد comment
اضافه کردن یک توضیح برای ستون.
6- متد default
مقدار پیشفرض برای ستون را تنظیم میکند.
7- متد first
مشخص میکند که ستون باید در ابتدای جدول قرار گیرد.
این متد فقط برای برخی پایگاههای داده (مانند MySQL) پشتیبانی میشود.
8- متد from
مقدار شروع را برای ستون عددی AUTO_INCREMENT مشخص میکند.
9- متد invisible
مشخص میکند که ستون در نتایج کوئریهای SELECT بهصورت پیشفرض مخفی باشد.
این ویژگی فقط در MySQL 8.0.23 یا بالاتر پشتیبانی میشود.
10- متد nullable
مشخص میکند که ستون میتواند مقدار NULL داشته باشد.
11- متد storedAs
ستون total مقدار price + tax را ذخیره میکند.
12- متد unsigned
مشخص میکند که ستون عددی بدون علامت (unsigned) باشد.
13- متد useCurrent
مقدار پیشفرض ستون را به زمان فعلی تنظیم میکند. معمولاً برای ستونهای timestamp یا datetime استفاده میشود.
14- متد useCurrentOnUpdate
مشخص میکند که ستون در زمان بهروزرسانی رکورد بهصورت خودکار مقدار زمان فعلی را دریافت کند.
15- متد virtualAs
ایجاد یک ستون محاسباتی مجازی (Virtual Generated Column). مقدار این ستون در دیتابیس ذخیره نمیشود.
ستون total مقدار price + tax را محاسبه میکند ولی ذخیره نمیشود.
16- متد generatedAs
تعریف یک ستون تولیدشده (Generated Column) با استفاده از عبارت SQL.
17- متد always
معمولاً همراه با ستونهای تولیدشده (Generated Column) استفاده میشود و مقدار آن همیشه از عبارت SQL تولید میشود.
18- متد change
برای تغییر ویژگیهای ستونهای موجود در یک جدول استفاده میشود.
این متد میتواند پس از 17 متد قبلی فراخوانی شود و ویژگی های ستون فعلی را ویرایش کند.
در این مثال، ستون id به صورت AUTO_INCREMENT ایجاد نشده است، اما با این متد به صورت AUTO_INCREMENT ویرایش می شود.
19- متد dropMorphs
این متد برای حذف ستونی که مربوط به Polymorphic Relations است، استفاده میشود.
20- متد dropRememberToken
این متد برای حذف ستونی که برای ذخیرهی remember token در جداول کاربران استفاده میشود، به کار میرود.
21- متد dropSoftDeletes
این متد برای حذف ستونهایی که مربوط به Soft Deletes هستند استفاده میشود.
22- متد dropSoftDeletesTz
این متد مشابه dropSoftDeletes است، اما برای ستونهایی که از نوع timestamp with timezone استفاده میکنند.
23- متد dropTimestamps
این متد برای حذف ستونهای created_at و updated_at استفاده میشود.
24- متد dropTimestampsTz
این متد مشابه dropTimestamps است، اما برای ستونهای created_at و updated_at که با نوع timestamp with timezone ذخیره شدهاند، استفاده میشود.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش اول - تعریف و اجرای Migrationها
1- متد after
مشخص میکند که ستون باید بعد از ستون دیگری قرار گیرد.
این متد فقط برای برخی پایگاههای داده (مانند MySQL) پشتیبانی میشود.
$table->string('middle_name')->after('first_name');
2- متد autoIncrement
مشخص میکند که ستون به صورت AUTO_INCREMENT تعریف شود.
$table->integer('id')->autoIncrement();
3- متد charset
تنظیم charset برای ستون.
$table->string('name')->charset('utf8mb4');
4- متد collation
تنظیم collation برای ستون.
$table->string('name')->collation('utf8mb4_unicode_ci');
5- متد comment
اضافه کردن یک توضیح برای ستون.
$table->integer('age')->comment('Age of the user in years');
6- متد default
مقدار پیشفرض برای ستون را تنظیم میکند.
$table->string('status')->default('active');
7- متد first
مشخص میکند که ستون باید در ابتدای جدول قرار گیرد.
این متد فقط برای برخی پایگاههای داده (مانند MySQL) پشتیبانی میشود.
$table->string('first_name')->first();
8- متد from
مقدار شروع را برای ستون عددی AUTO_INCREMENT مشخص میکند.
$table->integer('id')->autoIncrement()->from(1000);
9- متد invisible
مشخص میکند که ستون در نتایج کوئریهای SELECT بهصورت پیشفرض مخفی باشد.
این ویژگی فقط در MySQL 8.0.23 یا بالاتر پشتیبانی میشود.
$table->string('secret_code')->invisible();
10- متد nullable
مشخص میکند که ستون میتواند مقدار NULL داشته باشد.
$table->string('middle_name')->nullable();
11- متد storedAs
$table->integer('price');
$table->integer('tax');
$table->integer('total')->storedAs('price + tax');
ستون total مقدار price + tax را ذخیره میکند.
12- متد unsigned
مشخص میکند که ستون عددی بدون علامت (unsigned) باشد.
$table->integer('votes')->unsigned();
13- متد useCurrent
مقدار پیشفرض ستون را به زمان فعلی تنظیم میکند. معمولاً برای ستونهای timestamp یا datetime استفاده میشود.
$table->timestamp('created_at')->useCurrent();
14- متد useCurrentOnUpdate
مشخص میکند که ستون در زمان بهروزرسانی رکورد بهصورت خودکار مقدار زمان فعلی را دریافت کند.
$table->timestamp('updated_at')->useCurrentOnUpdate();
15- متد virtualAs
ایجاد یک ستون محاسباتی مجازی (Virtual Generated Column). مقدار این ستون در دیتابیس ذخیره نمیشود.
$table->integer('price');
$table->integer('tax');
$table->integer('total')->virtualAs('price + tax');
ستون total مقدار price + tax را محاسبه میکند ولی ذخیره نمیشود.
16- متد generatedAs
تعریف یک ستون تولیدشده (Generated Column) با استفاده از عبارت SQL.
$table->integer('price');
$table->integer('tax');
$table->integer('total')->generatedAs('price + tax');
17- متد always
معمولاً همراه با ستونهای تولیدشده (Generated Column) استفاده میشود و مقدار آن همیشه از عبارت SQL تولید میشود.
$table->integer('total')->generatedAs('price + tax')->always();
18- متد change
برای تغییر ویژگیهای ستونهای موجود در یک جدول استفاده میشود.
این متد میتواند پس از 17 متد قبلی فراخوانی شود و ویژگی های ستون فعلی را ویرایش کند.
$table->integer('id')->autoIncrement()->change();
در این مثال، ستون id به صورت AUTO_INCREMENT ایجاد نشده است، اما با این متد به صورت AUTO_INCREMENT ویرایش می شود.
19- متد dropMorphs
این متد برای حذف ستونی که مربوط به Polymorphic Relations است، استفاده میشود.
$table->dropMorphs('commentable');
20- متد dropRememberToken
این متد برای حذف ستونی که برای ذخیرهی remember token در جداول کاربران استفاده میشود، به کار میرود.
$table->dropRememberToken();
21- متد dropSoftDeletes
این متد برای حذف ستونهایی که مربوط به Soft Deletes هستند استفاده میشود.
$table->dropSoftDeletes();
22- متد dropSoftDeletesTz
این متد مشابه dropSoftDeletes است، اما برای ستونهایی که از نوع timestamp with timezone استفاده میکنند.
23- متد dropTimestamps
این متد برای حذف ستونهای created_at و updated_at استفاده میشود.
$table->dropTimestamps();
24- متد dropTimestampsTz
این متد مشابه dropTimestamps است، اما برای ستونهای created_at و updated_at که با نوع timestamp with timezone ذخیره شدهاند، استفاده میشود.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤8👍1
⚜️ دوره لاراول - قسمت هفتدهم
📚 مینی پروژه TODo App - دسته بندی ها
خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو یکمی جلوتر بردیم و هندل کردن بخش دسته بندی ها رو توسعه دادیم... ، یک مقدار ریزی درمورد Log ها حرف زدیم و ازشون استفاده کردیم...
توی قسمت های بعدی این مجموعه رو ادامه میدیم.
🎞 لینک ویدیو:
https://youtu.be/P8WUBBichTM
🔗 Github Repo
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
📚 مینی پروژه TODo App - دسته بندی ها
خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو یکمی جلوتر بردیم و هندل کردن بخش دسته بندی ها رو توسعه دادیم... ، یک مقدار ریزی درمورد Log ها حرف زدیم و ازشون استفاده کردیم...
توی قسمت های بعدی این مجموعه رو ادامه میدیم.
🎞 لینک ویدیو:
https://youtu.be/P8WUBBichTM
🔗 Github Repo
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
❤5
⚜️ دوره لاراول - قسمت هجدهم
📚 مینی پروژه TODo App - تسک ها
خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو یکمی جلوتر بردیم و هندل کردن بخش تسک ها رو توسعه دادیم...
توی قسمت های بعدی این مجموعه رو ادامه میدیم.
⭕️ یه مقدار در اخر ویدیو مشکل ادیت داریم.
🎞 لینک ویدیو:
https://youtu.be/_cEN-LIi2Lo
🔗 Github Repo
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
📚 مینی پروژه TODo App - تسک ها
خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو یکمی جلوتر بردیم و هندل کردن بخش تسک ها رو توسعه دادیم...
توی قسمت های بعدی این مجموعه رو ادامه میدیم.
⭕️ یه مقدار در اخر ویدیو مشکل ادیت داریم.
🎞 لینک ویدیو:
https://youtu.be/_cEN-LIi2Lo
🔗 Github Repo
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
❤1
Forwarded from Developix Support
سلام
پرسشنامه پیش رو با هدف درک بهتر رفتار و نیازهای کسبوکارهای اینترنتی ایرانی در استفاده از ابزارهای پرداخت توسط یک تیم پژوهشی مستقل طراحی شده است. نتایج این پژوهش به ما کمک میکند تا ابزارهایی کارآمدتر و منطبق با نیازهای واقعی شما ارائه دهیم. تکمیل این پرسشنامه کاملاً بینام است و هیچ اطلاعات شخصی از شما ذخیره نخواهد شد. پاسخهای شما نقش کلیدی در بهبود خدمات ابزارهای پرداختی اینترنتی در کشور دارد، بنابراین از شما خواهشمندیم با دقت و صداقت به سوالات پاسخ دهید. زمان لازم برای تکمیل: حدود 5 دقیقه لطفاً برای شروع پرسشنامه، روی لینک زیر کلیک کنید و ما را در این مسیر همراهی کنید.
.
https://survey.porsline.ir/s/lEtAnSw8
.
سپاس فراوان از همکاری صمیمانه شما
پرسشنامه پیش رو با هدف درک بهتر رفتار و نیازهای کسبوکارهای اینترنتی ایرانی در استفاده از ابزارهای پرداخت توسط یک تیم پژوهشی مستقل طراحی شده است. نتایج این پژوهش به ما کمک میکند تا ابزارهایی کارآمدتر و منطبق با نیازهای واقعی شما ارائه دهیم. تکمیل این پرسشنامه کاملاً بینام است و هیچ اطلاعات شخصی از شما ذخیره نخواهد شد. پاسخهای شما نقش کلیدی در بهبود خدمات ابزارهای پرداختی اینترنتی در کشور دارد، بنابراین از شما خواهشمندیم با دقت و صداقت به سوالات پاسخ دهید. زمان لازم برای تکمیل: حدود 5 دقیقه لطفاً برای شروع پرسشنامه، روی لینک زیر کلیک کنید و ما را در این مسیر همراهی کنید.
.
https://survey.porsline.ir/s/lEtAnSw8
.
سپاس فراوان از همکاری صمیمانه شما
👍3
فصل پنج - Migrations and Database
بخش اول - تعریف و اجرای Migrationها
1- متد unique
این متد یک ایندکس یکتا برای یک یا چند ستون تعریف میکند. ایندکس یکتا باعث میشود که مقدارهای تکراری برای این ستونها در جدول ذخیره نشود.
2- متد index
این متد یک ایندکس ساده برای یک یا چند ستون ایجاد میکند. این ایندکس برای بهبود عملکرد کوئریهایی استفاده میشود که مرتباً این ستونها را جستجو یا فیلتر میکنند.
3- متد primary
این متد یک کلید اصلی (Primary Key) برای یک یا چند ستون تعریف میکند. ستونهای کلید اصلی نمیتوانند مقدار NULL بپذیرند و باید یکتا باشند.
4- متد fullText
این متد یک ایندکس تماممتنی (Full Text Index) برای جستجوی سریع متن در ستونهای متنی (مثل TEXT یا VARCHAR) ایجاد میکند.
5- متد spatialIndex
این متد یک ایندکس مکانی (Spatial Index) برای ستونهای مختصات جغرافیایی (مانند ستونهایی با نوع GEOMETRY) ایجاد میکند.
6- متد renameIndex
این متد کلید اصلی جدول را حذف میکند.
7- متد dropUnique
این متد یک ایندکس یکتا را از جدول حذف میکند.
8- متد dropIndex
این متد یک ایندکس ساده را از جدول حذف میکند.
9- متد dropFullText
این متد یک ایندکس تماممتنی را از جدول حذف میکند.
10- متد dropSpatialIndex
این متد یک ایندکس مکانی را از جدول حذف میکند.
11- متد foreign
این متد مشخص میکند که یک ستون در جدول فعلی قرار است بهعنوان کلید خارجی عمل کند.
معمولاً به همراه متدهای references و on استفاده میشود.
12- متد references
این متد مشخص میکند که کلید خارجی به کدام ستون از جدول دیگر اشاره دارد.
13- متد on
این متد مشخص میکند که کلید خارجی باید به کدام جدول در پایگاه داده متصل شود.
14- متد foreignId
این متد یک راه کوتاهتر برای تعریف ستون کلید خارجی است. به طور پیشفرض، نوع ستون را unsignedBigInteger تعریف میکند.
15- متد constrained
این متد تعریف کلید خارجی را آسانتر و سریعتر میکند. زمانی که از آن استفاده کنید:
- ستون را بهعنوان کلید خارجی تعریف میکند.
- به صورت پیشفرض جدول مقصد را از نام ستون حدس میزند (مثلاً اگر ستون user_id باشد، به جدول users اشاره میکند).
- به ستون id بهعنوان کلید اصلی در جدول مقصد اشاره میکند.
16- متد dropForeign
برای حذف یک کلید خارجی (Foreign Key) در جدول استفاده میشود. این متد زمانی استفاده میشود که بخواهید محدودیتهای کلید خارجی روی یک ستون را از بین ببرید.
17و 18- متد های onUpdate و onDelete
زمانی که یک کلید خارجی (foreign key) تعریف میکنید، میتوانید رفتار حذف یا بهروزرسانی رکوردهای مرتبط را مشخص کنید.
ورودی می تواند حالت های restrict، set null، no action نیز باشد.
19- متد cascadeOnDelete
وقتی رکورد اصلی حذف شود، رکوردهای مرتبط در جدول فرعی هم حذف میشوند.
20- متد restrictOnDelete
اگر رکوردهای مرتبط در جدول فرعی وجود داشته باشند، حذف رکورد اصلی ممنوع است.
21- متد nullOnDelete
اگر رکورد اصلی حذف شود، مقدار کلید خارجی در جدول فرعی به NULL تغییر میکند.
22- متد noActionOnDelete
حذف رکورد اصلی تأثیری روی جدول فرعی ندارد.
23- متد restrictOnUpdate
اگر رکورد مرتبط در جدول فرعی وجود داشته باشد، تغییر مقدار کلید خارجی در جدول اصلی ممنوع است.
24- متد nullOnUpdate
اگر مقدار کلید خارجی در جدول اصلی تغییر کند، مقدار کلید خارجی در جدول فرعی به NULL تغییر میکند.
25- متد noActionOnUpdate
تغییر مقدار کلید خارجی در جدول اصلی تأثیری روی جدول فرعی ندارد.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش اول - تعریف و اجرای Migrationها
1- متد unique
این متد یک ایندکس یکتا برای یک یا چند ستون تعریف میکند. ایندکس یکتا باعث میشود که مقدارهای تکراری برای این ستونها در جدول ذخیره نشود.
$table->string('email')->unique();
2- متد index
این متد یک ایندکس ساده برای یک یا چند ستون ایجاد میکند. این ایندکس برای بهبود عملکرد کوئریهایی استفاده میشود که مرتباً این ستونها را جستجو یا فیلتر میکنند.
$table->string('username')->index();
3- متد primary
این متد یک کلید اصلی (Primary Key) برای یک یا چند ستون تعریف میکند. ستونهای کلید اصلی نمیتوانند مقدار NULL بپذیرند و باید یکتا باشند.
$table->integer('order_id')->primary();
4- متد fullText
این متد یک ایندکس تماممتنی (Full Text Index) برای جستجوی سریع متن در ستونهای متنی (مثل TEXT یا VARCHAR) ایجاد میکند.
$table->fullText('content');
5- متد spatialIndex
این متد یک ایندکس مکانی (Spatial Index) برای ستونهای مختصات جغرافیایی (مانند ستونهایی با نوع GEOMETRY) ایجاد میکند.
$table->point('coordinates')->spatialIndex();
6- متد renameIndex
این متد کلید اصلی جدول را حذف میکند.
$table->dropPrimary();
7- متد dropUnique
این متد یک ایندکس یکتا را از جدول حذف میکند.
$table->dropUnique('users_email_unique');
8- متد dropIndex
این متد یک ایندکس ساده را از جدول حذف میکند.
$table->dropIndex('users_username_index');
9- متد dropFullText
این متد یک ایندکس تماممتنی را از جدول حذف میکند.
$table->dropFullText('articles_content_fulltext');
10- متد dropSpatialIndex
این متد یک ایندکس مکانی را از جدول حذف میکند.
$table->dropSpatialIndex('locations_coordinates_spatialindex');
11- متد foreign
این متد مشخص میکند که یک ستون در جدول فعلی قرار است بهعنوان کلید خارجی عمل کند.
معمولاً به همراه متدهای references و on استفاده میشود.
$table->unsignedBigInteger('user_id');
$table->foreign('user_id');
12- متد references
این متد مشخص میکند که کلید خارجی به کدام ستون از جدول دیگر اشاره دارد.
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id');
13- متد on
این متد مشخص میکند که کلید خارجی باید به کدام جدول در پایگاه داده متصل شود.
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
14- متد foreignId
این متد یک راه کوتاهتر برای تعریف ستون کلید خارجی است. به طور پیشفرض، نوع ستون را unsignedBigInteger تعریف میکند.
$table->foreignId('user_id');
15- متد constrained
این متد تعریف کلید خارجی را آسانتر و سریعتر میکند. زمانی که از آن استفاده کنید:
- ستون را بهعنوان کلید خارجی تعریف میکند.
- به صورت پیشفرض جدول مقصد را از نام ستون حدس میزند (مثلاً اگر ستون user_id باشد، به جدول users اشاره میکند).
- به ستون id بهعنوان کلید اصلی در جدول مقصد اشاره میکند.
$table->foreignId('user_id')->constrained('users');
16- متد dropForeign
برای حذف یک کلید خارجی (Foreign Key) در جدول استفاده میشود. این متد زمانی استفاده میشود که بخواهید محدودیتهای کلید خارجی روی یک ستون را از بین ببرید.
$table->dropForeign('posts_user_id_foreign');
17و 18- متد های onUpdate و onDelete
زمانی که یک کلید خارجی (foreign key) تعریف میکنید، میتوانید رفتار حذف یا بهروزرسانی رکوردهای مرتبط را مشخص کنید.
$table->foreignId('user_id')->constrained('users')->onDelete('cascade')->onUpdate('cascade');
ورودی می تواند حالت های restrict، set null، no action نیز باشد.
19- متد cascadeOnDelete
وقتی رکورد اصلی حذف شود، رکوردهای مرتبط در جدول فرعی هم حذف میشوند.
$table->foreignId('user_id')->constrained('users')->cascadeOnDelete();
20- متد restrictOnDelete
اگر رکوردهای مرتبط در جدول فرعی وجود داشته باشند، حذف رکورد اصلی ممنوع است.
21- متد nullOnDelete
اگر رکورد اصلی حذف شود، مقدار کلید خارجی در جدول فرعی به NULL تغییر میکند.
22- متد noActionOnDelete
حذف رکورد اصلی تأثیری روی جدول فرعی ندارد.
23- متد restrictOnUpdate
اگر رکورد مرتبط در جدول فرعی وجود داشته باشد، تغییر مقدار کلید خارجی در جدول اصلی ممنوع است.
24- متد nullOnUpdate
اگر مقدار کلید خارجی در جدول اصلی تغییر کند، مقدار کلید خارجی در جدول فرعی به NULL تغییر میکند.
25- متد noActionOnUpdate
تغییر مقدار کلید خارجی در جدول اصلی تأثیری روی جدول فرعی ندارد.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤6👍2🔥1
بلاخره اکستنشن جدید Laravel بهصورت رسمی در ورژن بتا منتشر شد.
Extension ID:
برای فهمیدن جزئیات و خفن بودن این اکستنشن میتونید از وبلاگ لاراول نیوز بخونید:
https://laravel-news.com/laravel-vs-code-extension-public-beta
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
Extension ID:
laravel.vscode-laravel
برای فهمیدن جزئیات و خفن بودن این اکستنشن میتونید از وبلاگ لاراول نیوز بخونید:
https://laravel-news.com/laravel-vs-code-extension-public-beta
🔖 #Laravel, #PHP, #لاراول
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
🔥13👍2
فصل پنج - Migrations and Database
بخش اول - تعریف و اجرای Migrationها
در قسمت آخر این بخش به تمامی کامندهای مربوط به مایگریشن ها اشاره می شود.
1- کامند make:migration
این دستور برای ایجاد یک فایل Migration جدید استفاده میشود.
این کامند می تواند دو فلگ —create برای مایگریشن مربوط به ساخت جدول و —table برای مایگریشن های مربوط به ویرایش جدول را نیز دریافت کند.
2- کامند schema:dump
این دستور یک نسخه SQL dump از طرح پایگاه داده (schema) فعلی شما ایجاد میکند. این فایل در مسیر database/schema ذخیره میشود.
این متد نیز تعدادی فلگ دریافت میکند که در ادامه توضیح داده می شود:
- فلگ prune
فایلهای مهاجرت قدیمی (migration) را حذف میکند و تنها یک نسخه dump ایجاد میکند.
- فلگ database
این دستور نسخه SQL از طرح پایگاه داده را برای پایگاه داده مشخصشده ایجاد میکند.
همچنین می توانید هر دو فلگ را همزمان استفاده کنید.
3- کامند migrate
این دستور تمامی فایلهای مهاجرت را که تاکنون اجرا نشدهاند، اجرا میکند و پایگاه داده را بهروز میکند.
این کامند نیز تعدادی فلگ دریافت میکند:
- فلگ pretend
این دستور تغییرات مهاجرت را بدون اعمال واقعی، شبیهسازی میکند. میتوانید ببینید چه کوئریهایی قرار است اجرا شوند.
- فلگ isolated
این دستور مهاجرتها را در یک حالت ایزولهشده (isolated) اجرا میکند. این حالت معمولاً برای جلوگیری از تداخل مهاجرتها در اجراهای همزمان استفاده میشود.
- فلگ force
این دستور برای اجرای مهاجرتها در حالت Production (محیط عملیاتی) استفاده میشود. بهطور پیشفرض، مهاجرتها در Production متوقف میشوند، اما با --force اجرا خواهند شد.
4- کامند migrate:status
این دستور وضعیت مهاجرتها را نشان میدهد. مشخص میکند که کدام فایلهای مهاجرت اجرا شدهاند و کدام هنوز اجرا نشدهاند.
5- کامند migrate:rollback
این دستور آخرین گروه از مهاجرتها (آخرین batch) را برمیگرداند.
این کامند نیز تعدادی فلگ دریافت می کند که در ادامه بررسی می شود:
- فلگ step
این دستور x مرحله از آخرین مهاجرتها را برمیگرداند.
- فلگ batch
این دستور مهاجرتهای batch شماره ۳ را برمیگرداند.
مهاجرتها در اجرای هر بار migrate در یک batch مشخص ذخیره میشوند.
- فلگ pretend
این دستور مهاجرتها را برنمیگرداند، اما تغییرات آن را شبیهسازی کرده و کوئریهای مربوطه را نمایش میدهد.
6- کامند migrate:reset
این دستور همه مهاجرتها را به حالت اول برمیگرداند.
تمامی جداول و تغییرات اعمالشده حذف میشوند.
7- کامند migrate:refresh
این دستور ابتدا تمامی مهاجرتها را برمیگرداند (reset میکند) و سپس آنها را دوباره اجرا میکند.
این متد نیز فلگ هایی دریافت می کند:
- فلگ seed
این دستور همانند دستور قبل عمل میکند، اما علاوه بر آن، seederها را نیز اجرا میکند تا دادههای اولیه وارد پایگاه داده شوند. (سیدر ها در بخش بعدی توضیح داده می شود)
- فلگ step
این دستور x مرحله آخر مهاجرتها را برمیگرداند و دوباره اجرا میکند.
8- کامند migrate:fresh
این دستور تمام جداول پایگاه داده را بهطور کامل حذف میکند و سپس مهاجرتها را دوباره اجرا میکند.
این متد هم فلگ هایی را دریافت می کند:
- فلگ seed
این دستور همانند migrate:fresh عمل میکند، اما پس از اجرای مهاجرتها، seederها را نیز اجرا میکند.
- فلگ database
این دستور نسخه پایگاه داده خاص را از ابتدا میسازد.
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
بخش اول - تعریف و اجرای Migrationها
در قسمت آخر این بخش به تمامی کامندهای مربوط به مایگریشن ها اشاره می شود.
1- کامند make:migration
این دستور برای ایجاد یک فایل Migration جدید استفاده میشود.
php artisan make:migration create_flights_table
این کامند می تواند دو فلگ —create برای مایگریشن مربوط به ساخت جدول و —table برای مایگریشن های مربوط به ویرایش جدول را نیز دریافت کند.
php artisan make:migration create_flights_table
--create=flights
php artisan make:migration create_flights_table
--table=flights
2- کامند schema:dump
این دستور یک نسخه SQL dump از طرح پایگاه داده (schema) فعلی شما ایجاد میکند. این فایل در مسیر database/schema ذخیره میشود.
php artisan schema:dump
این متد نیز تعدادی فلگ دریافت میکند که در ادامه توضیح داده می شود:
- فلگ prune
فایلهای مهاجرت قدیمی (migration) را حذف میکند و تنها یک نسخه dump ایجاد میکند.
php artisan schema:dump --prune
- فلگ database
این دستور نسخه SQL از طرح پایگاه داده را برای پایگاه داده مشخصشده ایجاد میکند.
php artisan schema:dump --database=testing
همچنین می توانید هر دو فلگ را همزمان استفاده کنید.
3- کامند migrate
این دستور تمامی فایلهای مهاجرت را که تاکنون اجرا نشدهاند، اجرا میکند و پایگاه داده را بهروز میکند.
php artisan migrate
این کامند نیز تعدادی فلگ دریافت میکند:
- فلگ pretend
این دستور تغییرات مهاجرت را بدون اعمال واقعی، شبیهسازی میکند. میتوانید ببینید چه کوئریهایی قرار است اجرا شوند.
- فلگ isolated
این دستور مهاجرتها را در یک حالت ایزولهشده (isolated) اجرا میکند. این حالت معمولاً برای جلوگیری از تداخل مهاجرتها در اجراهای همزمان استفاده میشود.
php artisan migrate --isolated
- فلگ force
این دستور برای اجرای مهاجرتها در حالت Production (محیط عملیاتی) استفاده میشود. بهطور پیشفرض، مهاجرتها در Production متوقف میشوند، اما با --force اجرا خواهند شد.
4- کامند migrate:status
این دستور وضعیت مهاجرتها را نشان میدهد. مشخص میکند که کدام فایلهای مهاجرت اجرا شدهاند و کدام هنوز اجرا نشدهاند.
php artisan migrate:status
5- کامند migrate:rollback
این دستور آخرین گروه از مهاجرتها (آخرین batch) را برمیگرداند.
این کامند نیز تعدادی فلگ دریافت می کند که در ادامه بررسی می شود:
- فلگ step
این دستور x مرحله از آخرین مهاجرتها را برمیگرداند.
php artisan migrate:rollback --step=5
- فلگ batch
این دستور مهاجرتهای batch شماره ۳ را برمیگرداند.
مهاجرتها در اجرای هر بار migrate در یک batch مشخص ذخیره میشوند.
php artisan migrate:rollback --batch=3
- فلگ pretend
این دستور مهاجرتها را برنمیگرداند، اما تغییرات آن را شبیهسازی کرده و کوئریهای مربوطه را نمایش میدهد.
php artisan migrate:rollback --pretend
6- کامند migrate:reset
این دستور همه مهاجرتها را به حالت اول برمیگرداند.
تمامی جداول و تغییرات اعمالشده حذف میشوند.
php artisan migrate:reset
7- کامند migrate:refresh
این دستور ابتدا تمامی مهاجرتها را برمیگرداند (reset میکند) و سپس آنها را دوباره اجرا میکند.
php artisan migrate:refresh
این متد نیز فلگ هایی دریافت می کند:
- فلگ seed
این دستور همانند دستور قبل عمل میکند، اما علاوه بر آن، seederها را نیز اجرا میکند تا دادههای اولیه وارد پایگاه داده شوند. (سیدر ها در بخش بعدی توضیح داده می شود)
php artisan migrate:refresh --seed
- فلگ step
این دستور x مرحله آخر مهاجرتها را برمیگرداند و دوباره اجرا میکند.
php artisan migrate:refresh --step=5
8- کامند migrate:fresh
این دستور تمام جداول پایگاه داده را بهطور کامل حذف میکند و سپس مهاجرتها را دوباره اجرا میکند.
php artisan migrate:fresh
این متد هم فلگ هایی را دریافت می کند:
- فلگ seed
این دستور همانند migrate:fresh عمل میکند، اما پس از اجرای مهاجرتها، seederها را نیز اجرا میکند.
php artisan migrate:fresh --seed
- فلگ database
این دستور نسخه پایگاه داده خاص را از ابتدا میسازد.
php artisan migrate:fresh --database=admin
🔖 #Laravel, #PHP, #فصل_۵, #لاراول
👤 AmirHossein
💎 Channel: @DevelopixLaravel
❤4👍1