Cách sử dụng mối quan hệ trong bộ điều khiển Laravel

Xác định mối quan hệ. Các mối quan hệ Eloquent được định nghĩa là các phương thức trên các lớp mô hình Eloquent của bạn. Vì các mối quan hệ cũng đóng vai trò là trình tạo truy vấn mạnh mẽ, nên việc xác định các mối quan hệ dưới dạng phương thức cung cấp khả năng truy vấn và xâu chuỗi phương thức mạnh mẽ

Laravel cung cấp các mối quan hệ sau –

  • Một Đối Một
  • một đến nhiều
  • Nhiều nhiều

Bước 1

trước khi cài đặt hãy chắc chắn rằng bạn đã cài đặt nhà soạn nhạc

— Cài đặt dự án laravel

nhà soạn nhạc tạo dự án —prefer-dist laravel/laravel project_name

Bước 2

  • Mở ứng dụng trong trình soạn thảo văn bản của bạn, tôi sử dụng mã Visual studio (VS CODE)
  • Tạo cơ sở dữ liệu trong các ứng dụng của bạn như Laragon hoặc XAMPP
  • thay đổi tập tin. ENV trong dự án laravel của bạn
  • tìm DB_DATABASE=cơ sở dữ liệu của bạn
  • khởi động máy chủ với
php artisan serve

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

Trong mối quan hệ đầu tiên trong laravel, chúng ta sẽ tìm hiểu từng người một

Tạo Bộ điều khiển và Di chuyển Mô hình bằng mã ma thuật này

php artisan make:model Identitycard -mc

mở Chứng minh thư mẫu trong ứng dụng/Mô hình/Thẻ căn cước. php

thêm thuộc tính $guarded trong mô hình của bạn như thế này

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}

Tiếp theo, tìm tệp di chuyển trong cơ sở dữ liệu/di chuyển/2021_10_08_022409_create_identitycards_table. php

Mở tệp và chúng tôi có thể thêm trường trong bảng nhận dạng xem mã này

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}

Và chúng ta cũng tìm hiểu về faker Laravel 8

php artisan make:factory UserFactory --model=User // if in your project don't existphp artisan make:factory IdentitycardFactory --model=Identitycard

thay đổi mật khẩu trong UserFactory

public function definition(){return [   'name' => $this->faker->name(),   'email' => $this->faker->unique()->safeEmail(),   'email_verified_at' => now(),   'password' => bcrypt("12121212"), // change to bcrypt   'remember_token' => Str::random(10),];}

và sau đó mở IdentitycardFactory. php thay đổi thành này

public function definition(){ return [    'user_id' => \App\Models\User::factory()->create()->id,    'identity_number' => $this->faker->numerify('##########'),    'phone_number' => $this->faker->phoneNumber() ];}

sau đó chạy lệnh này

php artisan tinker App\Models\Identitycard::factory()->count(10)->create()

kiểm tra cơ sở dữ liệu của bạn, chúng tôi có 10 dữ liệu giả từ kẻ giả mạo của laravel

Tiếp theo, đi đến mô hình. Người sử dụng. php

thêm mối quan hệ mã này

________số 8_______

và sau đó đi đến Người mẫu. chứng minh nhân dân. php

thêm mối quan hệ mã này

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

được rồi, chúng tôi chỉ cần thêm mối quan hệ trên Người dùng mô hình và Chứng minh nhân dân

tiếp theo, chúng ta sẽ đi đến bộ điều khiển. ứng dụng/Http/Bộ điều khiển/IdentityController. php

thêm chỉ số chức năng như thế này

php artisan make:model Identitycard -mc
0

được rồi trường hợp này tôi chỉ hiển thị chứng minh nhân dân chỉ cóMột dữ liệu từ người dùng, bạn có thể sử dụng phương thức có hoặc không, tôi khuyên bạn nên sử dụng nó, sau đó

bạn thêm web tuyến đường. php

php artisan make:model Identitycard -mc
1

đăng ký trình duyệt của bạn

Chúng tôi có 10 dữ liệu từ bảng nhận dạng tiếp theo kiểm tra mối quan hệ từ phương thức dd

hình ảnh đ

vâng, có kiểm tra lại mối quan hệ người dùng và chúng tôi chỉ có một dữ liệu từ người dùng

vâng Chúng tôi đã nhận được Dữ liệu người dùng từ mối quan hệ nhận dạng

nếu bạn muốn hiển thị mối quan hệ này, hãy xem cái này

php artisan make:model Identitycard -mc
2

dữ liệu ví dụ

Tôi chỉ gọi quan hệ người dùng với $val->user->name

Mối quan hệ một đến nhiều

vẫn trong cùng một dự án,

Tôi có các ví dụ với bảng Sản phẩm và Thương hiệu

Tạo bộ điều khiển mô hình và di chuyển

php artisan make:model Identitycard -mc
3

kiểm tra di chuyển

php artisan make:model Identitycard -mc
4

mở nhãn hiệu_table. di chuyển php thêm một trường như thế này

php artisan make:model Identitycard -mc
5

và sau đó bạn có thể sản phẩm_table. di chuyển php và thay đổi thành này

php artisan make:model Identitycard -mc
6

sau đó bạn có thể viết mã trong lệnh của mình

php artisan make:model Identitycard -mc
7

chúng tôi vừa tạo thương hiệu và sản phẩm bảng okee tiếp theo

Mở ứng dụng mô hình/mô hình/Thương hiệu. php

thêm mối quan hệ này và tài sản được bảo vệ

php artisan make:model Identitycard -mc
8

Mở ứng dụng mô hình/mô hình/Sản phẩm. php

thêm mối quan hệ này và tài sản được bảo vệ

php artisan make:model Identitycard -mc
9

oke, chúng ta chỉ cần thêm mối quan hệ 1 vào nhiều giữa Thương hiệu và Sản phẩm

sau đó, chúng ta sẽ tạo lại dữ liệu giả Seeder với Seeder laravel

kiểm tra cái này

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
0

mở cơ sở dữ liệu tệp/seeders/BrandSeeder. php

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
1

và sau đó mở cơ sở dữ liệu/seeders/ProductSeeder. php

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
2

sau đó mở cơ sở dữ liệu/seeders/DatabaseSeeder. php

và chạy lệnh như thế này

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
3

Vâng, chúng tôi vừa tạo một data seeder với seed laravel, làm tốt lắm. )

sau đó vào Bộ điều khiển BrandController. php

thêm mã này

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
4

đừng quên thêm một tuyến đường trong web. php

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
5

đăng ký trình duyệt của bạn http. //127. 0. 0. 1. 8000/nhãn hiệu

dữ liệu thương hiệu

oke, ở trên có 4 dữ liệu, ta nhập bằng seeder

kiểm tra quan hệ có một mảng và quan hệ sản phẩm, có 2 mảng hoặc 2 quan hệ dữ liệu trên sản phẩm

vâng
có dữ liệu từ sản phẩm, vì vậy nếu bạn muốn hiển thị các mối quan hệ này, bạn có thể làm điều đó

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
6

ví dụ minh họa

Hoặc bạn có thể gọi quan hệ trên sản phẩm để tìm hiểu thương hiệu của sản phẩm

Okee mở bộ điều khiển ProductController. php

chúng tôi có 6 dữ liệu từ cơ sở dữ liệu sản phẩm, xem lại, chọn một dữ liệu của mảng sản phẩm

có mối quan hệ thương hiệu từ các sản phẩm, nhìn lại

vâng, chúng tôi đã có mối quan hệ thương hiệu từ các sản phẩm và nhìn chúng tôi nhận được brand_name là

“id” => 1
“tên_thương hiệu” => “Adidas”
“created_at” => “2021–10–08 04. 23. 18”
“updated_at” => “2021–10–08 04. 23. 18”

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
7

và kiểm tra trong trình duyệt của bạn. http. //127. 0. 0. 1. 8000/sản phẩm

Mối quan hệ nhiều đến nhiều

Mối quan hệ cuối cùng trong hướng dẫn này

Tôi có hai mối quan hệ bảng

nhiều là gì?

Mối quan hệ nhiều-nhiều xảy ra khi nhiều bản ghi trong một bảng được liên kết với nhiều bản ghi trong một bảng khác. Ví dụ: tồn tại mối quan hệ nhiều-nhiều giữa khách hàng và sản phẩm. khách hàng có thể mua nhiều sản phẩm khác nhau và nhiều khách hàng có thể mua sản phẩm

Trong laravel có một table pivot trộn hai tên thành một tên

Ví dụ tôi có bảng. sản phẩm và danh mục

vì vậy Laravel không thể đọc bảng danh mục sản phẩm tự động

- Đầu tiên

trước đây chúng tôi đã thực hiện di chuyển sản phẩm, bộ điều khiển và mô hình, chúng tôi không thực hiện nữa. chúng tôi chỉ tạo một danh mục

Tạo bộ điều khiển mô hình và di chuyển và xoay bảng vì trong laravel chúng tôi sử dụng bảng tổng hợp cho nhiều người

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
8

mở tập tin di chuyển

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Identitycard extends Model{    use HasFactory;    protected $guarded = [];}
9

danh mục di chuyển

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}
0

di chuyển danh mục_sản phẩm

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}
1

và chạy cái này trong lệnh của bạn

php artisan make:model Identitycard -mc
7

Mô hình mở Danh mục và Sản phẩm

sao chép mối quan hệ này

Loại. php

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}
3

Sản phẩm. php

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}
4

Sau đó, chúng tôi tạo dữ liệu seeder cho bảng danh mục

chạy lệnh này

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}
5

mở tập tin CategorySeeder. php

Sao chép mã này

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}
6

sau đó

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}
7

Tiếp theo, Chuyển đến bộ điều khiển ProductController. php

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}
8

Đọc thêm tại

Đừng quên thay đổi tuyến đường web. php

Tôi sử dụng phương thức get cho dữ liệu giả, không sử dụng get cho dữ liệu lưu trữ, bạn có thể sử dụng Route. bưu kiện

public function up(){Schema::create('identitycards', function (Blueprint $table) {   $table->id();   $table->unsignedBigInteger('user_id');   $table->string('identity_number');   $table->string('phone_number');   $table->timestamps();
$table->foreign('user_id')->on('users')->references('id') ->onDelete('CASCADE') ->onUpdate('CASCADE');});}
9

mở trong trình duyệt của bạn http. //127. 0. 0. 1. 8000/sản phẩm/cửa hàng

và bạn có thể thấy trong cơ sở dữ liệu của mình có một sản phẩm mới từ liên kết ở trên

và kiểm tra bảng category_product có một số dữ liệu category_id từ phương thức đồng bộ hóa, $product->categories()->sync($category_id);

Làm cách nào để xác định 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 viết.

Làm cách nào để sử dụng mối quan hệ hasMany trong bộ điều khiển laravel?

Sử dụng phương thức hasMany trong bảng bình luận bài viết .
Bước 1. Tạo mô hình bài viết và bình luận. Tạo hai model trong thư mục app\Models, một là bài viết và một là bình luận. .
Bước 2. Tạo quan hệ hasMany trong mô hình Article. .
Bước 3. Sử dụng mối quan hệ trong bộ điều khiển. .
Bước 4. Tạo tuyến đường

Làm cách nào tôi có thể cập nhật mối quan hệ của mình trong laravel?

Cập nhật dữ liệu quan hệ laravel .
$user->profile() sẽ trả về lớp quan hệ như Illuminate/Database/Eloquent/Relations/HasOne
$user->profile sẽ trả về lớp mô hình UserProfile thực tế

Làm cách nào để sử dụng hasOne trong laravel?

Hãy giải thích việc sử dụng hasOne trong bảng nhận xét bài viết .
Tạo bình luận và mô hình bài viết. Mô hình mặt hàng. .
Tạo mối quan hệ hasOne trong mô hình vật phẩm.
Sử dụng quan hệ trong bộ điều khiển. Hãy tạo một bộ điều khiển và nhập các lớp cần thiết để truy cập mô hình và các mối quan hệ của nó. .
Tạo tuyến đường