آموزش ایجاد ارتباط در پایگاه داده لاراول
در این پست آموزشی نحوه ایجاد ارتباط در پایگاه داده لاراول را برای شما آماده کرده ایم. این ارتباط بین دو جدول با نام cards و notes بوده که از نوع یک به چند (one to many) می باشد. یعنی هر card می تواند چند note داشته باشد (hasMany) و هر note فقط مربوط به یک card می باشد (belongsTo).
در صورتیکه قسمت قبلی ارتباط با دیتابیس در لاراول را مشاهده نکردید حتما آن را مطالعه کنید.
ابتدا مایگریشن های زیر ایجاد میکنیم
php artisan make:migration create_cards_table –-create=cards
php artisan make:migration create_notes_table –-create=notes
مایگریشن create_cards_table را از مسیر database/migrations پیدا کرده و فیلد title را در آن بسازید
$table->string('title');
سپس مایگریشن create_notes_table را از مسیر database/migrations پیدا کنید و ستون های زیر را به جدول notes اضافه کنید
$table->integer('card_id')->unsigned()->index();
$table->text('body');
برای ارتباط دادن دو جدول نیاز به یک فیلد کلید داریم. در صورتیکه از کلید خارجی برای ایجاد یک ارتباط بین جدول ها استفاده کنید ممکن است در آینده هنگام حذف مقادیر از جدول و یا آپدیت مقادیر با مشکل مواجه شوید. برای رفع چنین مشکلاتی باید از قید جامعیت در جدول استفاده کنید.
در این مثال ما از ایندکس به جای کلید خارجی استفاده میکنیم.
فیلد card_id در جدول notes مقدار id از جدول cards را در خود نگه می دارد و مشخص میکند که یک note مربوط به کدام card می باشد
جهت ایجاد ستون های اضافه شده به جدول notes و cards باید migrate کنید
php artisan migrate
این دستور فیلدهای اضافه شده در جدول های cards و notes را ذخیره می کند. به منظور ایجاد ارتباط بین دو جدول cards و notes از مدل استفاده می کنیم.
حالا نوبت به ساخت یک مدل می رسد. مدل ها در قسمت آموزش بانک اطلاعاتی در لاراول توضیح داده شد.
php artisan make:model Card
php artisan make:model Note
مدل Card را از مسیر App پیدا کنید و تابع زیر را در آن تعریف کنید.
public function notes(){
return $this->hasMany(Note::class);
}
تابع notes در واقع اسم جدول مورد نظر ما می باشد که قرار است فیلد card_id را از جدول cards بگیرد. کلمه کلیدی hasMany به معنای ارتباط چندگانه می باشد.یعنی هر card می تواند چند note داشته باشد.
مدل Note را باز کنید و تابع زیر را در آن تعریف کنید:
public function card(){
return $this->belongsTo(Card::class);
}
کلمه کلیدی belongsTo به معنای این است که هر note فقط متعلق به یک card می باشد.
می خواهیم مقداری را در جدول ذخیره کنیم حالا tinker را اجرا کنید. یک متغیر در آن تعریف کنید به شکل زیر:
note=new App\Note;
$note->body='this is 1th body';
برای اینکه مقدار card_id بصورت خودکار از جدول card گرفته شود و در جدول notes ذخیره شود به شکل زیر عمل می کنیم
$card = App\Card::first();
$card->notes()->save($note);
ابتدا یک متغیر note تعریف کردیم و مدل Note را به آن نسبت دادیم. جدول notes دارای ۵ فیلد می باشد. فیلد id از نوع AI می باشد که با ثبت هر رکورد بصورت خودکار مقدار دهی می شود.
خط دوم فیلد body را مقدار دهی می کند در اینجا مقدار 'this is 1th body' را وارد کردیم
فیلد بعدی card_id می باشد برای مقدار دهی این فیلد بر اساس جدول card یک متغیر به نام card تعریف و به مدل Card نسبت دادیم. در این دستور از تابع ()first استفاده شده که اولین card موجود در جدول cards را بر می گرداند
در خط آخر متغیر card که به اولین card موجود در جدول cards اشاره میکند تابع notes که در مدل Note تعریف کردیم را فراخوانی می کند (hasMany) و مقدار متغیر note را به این تابع ارسال می کند به این ترتیب لاراول فیلد id را از جدول card فراخوانی کرده و در فیلد card_id قرار می دهد.
دو فیلد دیگر مربوط به زمان ایجاد و بروز رسانی جدول می باشد که آن ها نیز به صورت خودکار مقدار دهی می شوند.
به منظور نمایش این اطلاعات در یک صفحه از یک view استفاده می کنیم
وارد کنترلر CardsController شوید و کد زیر را در آن وارد کنید
public function show($id){
$card = Card::find($id);
return view('show', compact('card'));
}
یک view جدید به نام show ایجاد کنید (show.blade.php) حال وارد view مورد نظر شوید و کد زیر را در آن وارد کنید
<ul>
@foreach($card->notes as $note)
<li> {{ $note->body }} </li>
@endforeach
</ul>
همچنین کد زیر را در route.php وارد کنید
Route::get('card/{card}','CardsController@show');
حال پروژه را Run کنید و ادرس زیر را در مرورگر خود وارد کنید
localhost:8000/card/1
به پایان این آموزش رسیدیم. امیدواریم از این آموزش خوشتون اومده باشه. ما را از نظرات سازنده خود بی بهره نگذارید چسبون - آموزش برنامه نویسی و طراحی سایت