تخفیف نوروزی پی استور
هزینه سفارش:
۹۹,۰۰۰ تومان
یکی از عناصر اساسی فریم ورک لاراول، الوکوئنت Eloquent ORM است. لاراول برای برقرار کردن رابطه بین دو یا چند جدول در دیتابیس از Eloquent ORM استفاده می کند. این فریم ورک محبوب برای ایجاد ارتباط بین مدل های الوکوئنت، روش های کابر پسند بسیاری فراهم نموده است. در این جلسه یکی از این رابطه ها بنام رابطه یک به یک در لاراول با یک مثال عملی، مورد مطالعه قرار می گیرد.
در آموزش لاراول، رابطه یک به یک در لاراول، ساده ترین و بنیادی ترین نوع ارتباط می باشد. استفاده از این رابطه بسیار آسان و کاربردی است. رابطه یک به یک در لاراول یک ستون از یک جدول پایگاه داده را به تنها یک ستون از جدولی دیگر پیوند می دهد.
برای مثال فرض کنید جدولی داریم به نام users که برای احراز هویت کاربران، به کار می رود. می خواهیم اطلاعات دیگر کاربر از قبیل تاریخ تولد، بیو و آدرس شبکه های اجتماعی را نیز ذخیره کنیم. می توانیم این اطلاعات را در همان جدول users در داخل ۴ ستون دیگر ذخیره کنیم. اما با این کار جدول users شلوغ و اندکی کثیف خواهد شد.
برای تمیز نگه داشتن جداول، می خواهیم نام و کلمه عبور و ایمیل کاربران را در جدول users و اطلاعات پروفایل کاربر را در جدولی دیگر بنام profiles ذخیره کنیم.
می دانیم که باید هر کاربر تنها یک profile خواهد داشت و هر profile تنها متعلق به یک user خواهد بود.
می دانیم که هنگام نصب لاراول، مدل User و مایگریشن users بصورت اتوماتیک در پروژه ایجاد می شود و ما فقط نیاز به ایجاد مدل Profile و مایگریشن اش می باشیم. می توانیم با یک دستور هر دو را بسازیم :
php artisan make:model Profile -m
سپس برای ایجاد رابطه یک به یک migration مربوط به جدول profiles را هم باز می کنیم و اینگونه تغییر می دهیم :
public function up() { Schema::create('profiles', function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('user_id')->unsigned()->index(); $table->date('dob'); $table->text('bio'); $table->string('instagram'); $table->timestamps(); $table->foreign('user_id')->references('id')->on('users') ->onDelete('cascade')->onUpdate('cascade'); }); }
در خط پنجم اقدام به تعریف کلید خارجی یا foreign key می کنیم. کلید خارجی وظیفه اتصال و ارتباط دو جدول را به عهده دارد و هنگام ثبت یک profile جدید، مقدار این کلید دقیقا برابر id مربوط به user مربوط به این profileخواهد بود. نوع این کلید باید با id جدول users مطابقت داشته باشد زیرا این کلید به آن id اشاره می کند. مثلا در این مورد چون نوع id در جدول users برابر با bigIncrements بود، نوع کلید خارجی را هم bigInteger قرار دادیم.
در خطوط آخر دقیقا اشاره کردیم که کلید خارجی مربوط به کدام ستون از کدام جدول است :
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade') ->onUpdate('cascade');
عبارت های OnDelete هم اشاره می کنند که هنگام حذف یک user پروفایلش نیز از جدول profiles حذف گردد.
سپس دستور زیر :
php artisan migrate
اگر در phpmyadmin روی دیتابیس تان کلیک کرده و به سربرگ یا همان منوی Designer بروید با شکل زیر مواجه خواهید شد :
این شکل نشانگر ارتباط بین دو جدول و نیز ارتباط ستون id از جدول users و ستون user_id از جدول profiles است. درواقع این ارتباط زمانی ایجاد شد که کلید خارجی تعریف کردیم. این شکل به خوبی نشان می دهد که user_id همان id در است.
در مدل User متد زیر را تعریف می کنیم :
public function profile() { return $this->hasOne(Profile::class); } </pre> در مدل Profile : <pre class="lang:php decode:true ">class Profile extends Model { protected $fillable = ['dob', 'bio' , 'instagram']; public function user() { return $this->belongsTo(User::class); } }
حال که رابطه بین دو جدول را برقرار کرده اید می توانید به اطلاعات پروفابل هر کاربر با صدا زدن متد profile البته بدن پرانتز دسترسی پیدا کنید :
$user = User::find(1); $userInsta = $user->profile->instagram; $userBio = $user->profile->bio;
لاراول برای فراخوانی پروفایل کاربر، به جدول profiles سر زده و در ستون user_id دنبال عددی برابر id کاربر خواهد گشت.
برای ایجاد پروفایل برای یک کاربر می توان از دو روش استفاده کرد :
روش اول : استفاده از متد save()
$profile = new Profile(); $profile->dob = '1987-01-20'; $profile->bio = 'Laravel Student'; $profile->instagram = 'laraveltop'; $user = User::first(); $user->profile()->save($profile);
روش دوم : استفاده از متد create()
$user = \App\User::first(); $user->profile()->create([ 'dob' => '2000-11-03', 'bio' => 'I am Laravel Student', 'instagram' => 'laraveltop' ]);
حذف پروفایل یک کاربر همانند ایجاد ارتباط برای آن است. با این تفاوت که به جای متد create از متد delete استفاده خواهیم کرد :
$user = User::first(); $user->profile()->delete();
حال اگر dd بگیریم :
dd(User::first()->profile);
عبارت null در صفحه را مشاهده خواهید نمود.
نکته
چون هنگام تعریف کلید خارجی از عبارت onDelete(‘cascade’) استفاده کردیم، هنگام حذف یک کاربر، پروفایل آن نیز از جدول profiles حذف خواهد شد.
نام اثر : فیلم آموزش صفر تا صد لاراول – جلسه سیزدهم: رابطه یک به یک در لاراول
مدرس : مهندس سالار عباپور
مدت زمان : 37 دقیقه
زبان آموزش : فارسی
حجم فایل : یک فایل با حجم ۱۱۰ مگا بایت
فرمت ویدئو : MP4 با کیفیت بالا
فیلم آموزش صفر تا صد لاراول – جلسه سیزدهم: رابطه یک به یک در لاراول ۶ محصولی است که در این پست به آن پرداخته شده است. در این آموزش به توضیح و معرفی رابطه ها در لاراول پرداخته شده است است. این محصول بصورت کامل توسط گروه پشتیبانی پی استور تست و بازبینی شده است. محصول دارای نشان تضمین کیفیت پی استور می باشد.
فارغ التحصیل رشته مهندسی برق و مدرس دوره های طراحی سایت - ایشان در زمینه طراحی سایت با زبان های برنامه نویسی PHP و فریمورک لاراول Laravel فعال هستند و همچنین یکی از تحلیل گران خبره در حوزه بازارهای مالی بین المللی و بورس هستند.
نام اثر: | رابطه یک به یک در لاراول |
نوع اثر: | |
سالار عباپور |
توجه: کیفیت این محصول توسط پی استور تضمین شده و در صورت عدم رضایت از محصول، به انتخاب شما:
هزینه سفارش:
۹۹,۰۰۰ تومان
نظرات
مدیریت و پشتیبانی
نظرات و پیشنهادات خود را با ما در میان بگذارید.