Làm cách nào để tạo mối quan hệ 1-1 trong Laravel?

Laravel 9 ví dụ về mối quan hệ một đối một;

Mối quan hệ một đối một là một mối quan hệ rất cơ bản. Và sử dụng mối quan hệ 1-1, bạn có thể chèn, truy xuất, cập nhật và xóa dữ liệu với mô hình hùng hồn từ bảng cơ sở dữ liệu trong laravel

Laravel Eloquent Ví dụ về mối quan hệ một đối một

Cho bạn 2 bảng tên bài viết và nội dung. Sử dụng di chuyển laravel, bạn có thể tạo cả hai bảng với các trường sau

Bài di chuyển bảng

Schema::create('posts', function (Blueprint $table) {

    $table->increments('id');

    $table->string('title');

    $table->text('short_desc');

    $table->timestamps();

});

Di chuyển bảng nội dung

Schema::create('contents', function (Blueprint $table) {

    $table->increments('id');

    $table->integer('post_id')->unsigned();

    $table->text('description');

    $table->timestamps();


    $table->foreign('post_id')->references('id')->on('posts')

        ->onDelete('cascade');

});

Mối quan hệ một đối một là một trong những mối quan hệ cơ bản. Ví dụ: mô hình Bài đăng sẽ được liên kết với mô hình Nội dung. Để minh họa mối quan hệ này, chúng ta có thể tạo phương thức post_content() trong mô hình Bài đăng và gọi phương thức hasOne() để liên kết mô hình Nội dung

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function post_content()
    {
        return $this->hasOne('App\Content');
    }
}

Điều quan trọng cần lưu ý là Eloquent thiết lập khóa ngoại dựa trên tên model và phải có id giá trị phù hợp. Ở đây post_id là Foreign_key của Nội dung, vì vậy để tạo mối quan hệ

Khuyến khích. - Ví dụ về mối quan hệ một đến nhiều hình của Laravel

Nghịch đảo của ví dụ về mối quan hệ một đối một

Cho đến nay, chúng tôi có thể truy cập nội dung từ bài đăng. Bây giờ chúng ta hãy tạo một mối quan hệ nghịch đảo trên mô hình nội dung để bài đăng có thể truy cập mô hình từ nó. Để làm điều này, chúng ta có thể sử dụng phương thức thuộc về để lấy dữ liệu bài đăng trên mô hình nội dung

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Content extends Model
{
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

Bây giờ chúng ta có thể truy cập nội dung bài đăng bằng phương thức quan hệ như thế này

$content = Post::find(10)->post_content;

Bạn có thể chèn bản ghi từ bài đăng và bảng nội dung bằng mối quan hệ 1-1

   public function addPost()
    {
        $post = new Post;
        $post->title= "Hello world";
        $post->short_desc= "Hello world";
        $post->save();

        $content = new Content;
        $content->description= 'helllo world post description';
        $content->post_content()->save($content);
    }

nếu bạn muốn truy xuất dữ liệu từ cả bảng bài đăng và nội dung, bạn có thể sử dụng mối quan hệ 1-1 như sau

public function index()
{
    // get post and content from Post Model
    $post = Post::find(1);
    var_dump($post->title);
    var_dump($post->post_content->description);

    // get post data from PostContent model
    $post= Content::find(1)->post;
    dd($post);

}

Nếu bạn muốn xóa dữ liệu khỏi cả bảng và nội dung, bạn có thể sử dụng mối quan hệ 1-1 như sau

public function delete()
{
    $post = Post::find(1);
    $post->delete();
}

Khuyến khích. - Laravel Ví dụ về mối quan hệ nhiều đến nhiều hình

Khuyến khích. - Laravel Ví dụ về mối quan hệ nhiều đến nhiều hình

Phần kết luận

Trong ví dụ về mối quan hệ 1-1 trong laravel này, bạn đã học cách triển khai mối quan hệ 1-1 trong laravel. Và cũng như cách sử dụng mối quan hệ này

Đây là Phần 1 của Laravel 8 - Eloquent Relationships Tutorial

Làm cách nào để tạo mối quan hệ 1-1 trong Laravel?

Cài đặt
Hãy tạo ứng dụng laravel erd-app

________số 8_______

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

mở. env và kết nối với cơ sở dữ liệu cục bộ của bạn

Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });
2

Sau đó tạo cơ sở dữ liệu sinh viên và hồ sơ

Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });
3

đi tới ứng dụng/cơ sở dữ liệu/di chuyển

Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

sao chép và lưu

Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });
4

đi tới ứng dụng/cơ sở dữ liệu/di chuyển

Schema::create('profiles', function (Blueprint $table) {
            $table->id();
            $table->foreignId('student_id');
            $table->string('email');
            $table->string('phone');
            $table->timestamps();
        });

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

sao chép và lưu

chạy di chuyển để tạo bảng

Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });
5
kiểm tra cơ sở dữ liệu của bạn nếu thành công

Bây giờ hãy tạo mô hình sinh viên và hồ sơ

Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });
6
Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });
7

mô hình phải là số ít trong khi bảng là số nhiều

Mối quan hệ một đối một

Vào app/Models và mở 2 model vừa tạo

xác định mối quan hệ một đối một
trong Người mẫu/Sinh viên. php

protected $fillable = [
        'first_name',
        'last_name',
    ];

    public function profile()
    {
        return $this->hasOne('App\Models\Profile');
    }

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

trong Mô hình/Hồ sơ. php

  protected $fillable = [
        'student_id',
        'email',
        'phone',
    ];

    public function student()
    {
        return $this->belongsTo('App\Models\Student');
    }

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

điều này sẽ xác định mối quan hệ giữa hai mô hình

Tạo bộ điều khiển và tuyến đường

Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });
8

đi tới ứng dụng/Http/Bộ điều khiển/StudentController

use App\Models\Student;

...

public function index(){
        $stu = Student::find(1);
        dd($stu);
    }

    public function store(){
        $student = new Student;
        $student->first_name = 'Dale';
        $student->last_name = 'Lanto';
        $student->save();
        dd($student);
    }

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

tạo các tuyến trong ứng dụng/tuyến/web. php

Route::get('/students', [StudentController::class,'index'])->name('students');
Route::get('/students/store', [StudentController::class,'store'])->name('store');

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

trong trình duyệt của bạn đi đến http. //máy chủ cục bộ. 8000/sinh viên/cửa hàng để tạo 1 mục trong cơ sở dữ liệu

truy cập http. //máy chủ cục bộ. 8000/học sinh để kiểm tra các mô hình

nó sẽ trông giống như

Bây giờ hãy tạo 1 mục nhập cho hồ sơ

tạo tuyến đường mới

Route::get('/students/store/profile', [StudentController::class,'store_profile'])->name('storeProfile');

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

tạo chức năng mới trong bộ điều khiển

public function store_profile(){

        $student = Student::find(1);

        $profile = new Profile;
        $profile->student_id = $student->id;
        $profile->email = '[email protected]';
        $profile->phone = '7623423814';
        $profile->save();

        dd($profile);
    }

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

truy cập http. //máy chủ cục bộ. 8000/students/store/profile để tạo 1 mục trong cơ sở dữ liệu

cập nhật chức năng chỉ mục bằng cách gọi hồ sơ từ sinh viên

public function index(){
        $student = Student::find(1);
        dd($student->profile);
    }

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

truy cập http. //máy chủ cục bộ. 8000/học sinh kiểm tra

nó sẽ trông giống như

tiếng hoan hô. Chúng tôi đã tạo thành công Mối quan hệ một đối một của mình

Để có các phương pháp hay nhất, tốt nhất là bao gồm Foreign_key và local_key/owner_key trong mô hình

Hãy đi tới Mô hình/Hồ sơ. php và thay đổi mã này

Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });
0

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bây giờ hãy truy cập hồ sơ từ mô hình sinh viên

Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->timestamps();
        });
1

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Kết quả

Nhấp vào liên kết này để tiếp tục với hướng dẫn tiếp theo - Mối quan hệ một đến nhiều

Mối quan hệ 1-1 trong Laravel có nghĩa là gì?

Mối quan hệ một đối một là một loại quan hệ cơ sở dữ liệu rất cơ bản . Ví dụ: một kiểu Người dùng có thể được liên kết với một kiểu Điện thoại. Để xác định mối quan hệ này, chúng tôi sẽ đặt một phương thức điện thoại trên mô hình Người dùng. Phương thức điện thoại sẽ gọi phương thức hasOne và trả về kết quả của nó.

Làm cách nào để tạo mối quan hệ trong Laravel?

Để xác định mối quan hệ, trước tiên chúng ta cần xác định phương thức post() trong mô hình Người dùng . Trong phương thức post(), chúng ta cần triển khai phương thức hasOne() trả về kết quả. Hãy hiểu mối quan hệ 1-1 thông qua một ví dụ. Đầu tiên, chúng tôi thêm cột mới (user_id) vào bảng hiện có có tên là bài đăng.

Laravel triển khai mối quan hệ một đến nhiều như thế nào?

Tạo một mô hình LinkList
Tạo Migration cho LinkList Model
Cập nhật di chuyển liên kết
Cấu hình mối quan hệ Eloquent Model

một là gì

Mối quan hệ một đối một là liên kết giữa thông tin trong hai bảng, trong đó mỗi bản ghi trong mỗi bảng chỉ xuất hiện một lần. Ví dụ: có thể có mối quan hệ trực tiếp giữa nhân viên và ô tô họ lái .