دورة laravel للمبتدئين الدرس الثالت عشر


فهاد الدرس الثالت عشر من دورة laravel للمبتدئين غادي نشوفوا واحد الحاجة مهمة ف laravel لي هي les relations ما بين les tables.
فكل table يمكن نربطها ب table أخرى باستعمال ل clé étrangère وباستعمال la relation ممكن نسترجع المعلومات من جداول متعددة فنفس الوقت.


1- عرض les posts فالصفحة الرئيسية

فغادي نديرو واحد التغيير على الصفحة الرئيسية وغادي نعرضوا فيها les posts ديالنا كاملين.
قبل غادي نمشي ل web.php ف route / لي هو لي كيعرض الصفحة الرئيسية غادي نسترجع les posts كاملين منبعد ما زدت ل Post model فأول الملف.
فالتغيير لي درنا على web.php هو :

                                //web.php
<?php
use App\Post;

Route::get('/', function () {
    $posts = Post::all();
    return view('welcome',compact('posts'));
});
                            

2- عرض les posts فالصفحة الرئيسية تتمة

منبعد فالملف welcome.blade.php لي هو الصفحة الرئيسية ديالنا غادي نزيدو واحد table لي غادي نعرض فيها les posts لي جاونا من الملف web.php.

فغادي نخدم ب foreach لي كتمكنا من عرض المعلومات الخاصة بكل post بالنسبة ل auteur لي هو المستخدم لي زاد ل post غادي نخليوه خاوي حتى نزيدو la relation عاد غادي نشوفو كيفاش نعرضوه.

فدبا فالصفحة الرئيسية غادي تكون عندي هاد النتيجة :



الكود لي زدنا ف welcome.blade.php هو :

                                //welcome
<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
    </head>
    <body>
        <div class="container">
            <div class="row mt-4">
                <div class="col-md-6">
                    <h3>Ajouter un article</h3>
                    <hr>
                    {{-- part 4 --}}
                    @if(Session::has('success'))
                        <div class="alert alert-success">{{Session::get('success')}}</div>
                    @endif
                    {{-- part 3 --}}
                    @foreach($errors->all() as $error)
                        <div class="alert alert-danger">{{$error}}</div>
                    @endforeach
                    {{-- part 1 --}}
                    <form action="{{route('post.add')}}" method="post">
                        {{csrf_field()}}
                        <div class="form-group">
                            <input type="text" placeholder="Titre" name="title" class="form-control">
                        </div>
                        <div class="form-group">
                            <textarea placeholder="Description" col="30" rows="5" name="body" class="form-control"></textarea>
                        </div>
                        <div class="form-group">
                            <button class="btn btn-primary" type="submit">Valider</button>
                        </div>
                    </form>
                </div>
                <div class="col-md-6">
                    <h3>Articles</h3>
                    <hr>
                    <table class="table table-hover">
                        <thead>
                            <tr>
                                <th>Auteur</th>
                                <th>Titre</th>
                                <th>Déscrption</th>
                            </tr>
                        </thead>
                        <tbody>
                            @foreach($posts as $post)
                                <tr>
                                    <td></td>
                                    <td>{{$post->title}}</td>
                                    <td>{{$post->body}}</td>
                                </tr>
                            @endforeach
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </body>
</html>
                            

3- إضافة الحقل user_id ل table posts

فباش ندير la relation ما بين la table posts و users غادي نزيد ل id ديال ل user ف table posts فباش ندير هادشي خص نزيد واحد ل migration فغادي ندير هاد ل commande :

php artisan make:migration add_user_id_to_posts_table --table=posts

منبعد غادي تمشي ل database ثم migrations غادي تلقى ل migration تزادت فغادي نزيدو اسم الحقل لي سميناه user_id وعطيناه par défaut 1 فكل les posts غادي يكونوا ديال ل user لي عندو ل id واحد منبعد غادي ندير la commande :

php artisan migrate 

فغادي يتزاد الحقل ف table posts الكود لي زدنا فل migration add_user_id_to_posts_table هو :

                                //
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddUserIdToPostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            //
            $table->integer('user_id')->unsigned()->default(1);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            //
            $table->dropColumn('user_id');
        });
    }
}
                            

4- العلاقة belongsTo ف laravel

العلاقة belongsTo ف laravel كتمكن باش نقول بلي واحد table هي تابعة ل table أخرى فالمثال ديالنا غادي نمشي ل Model Post غادي نزيد fonction user لي فيها كنقول بلي كل post هو تابع ل user وكنحددها ب belongsTo لي كتاخد اسم ل model لي هنا هو User.

الكود لي زدنا ف Post.php هو :

                                    //
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    //
    public function user(){
        return $this->belongsTo(User::class);
    }
}