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
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 = 'dalelanto@gmail.com'; $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