Home  >  Article  >  PHP Framework  >  Let’s talk about the simplest “one-to-one” relationship between Laravel models!

Let’s talk about the simplest “one-to-one” relationship between Laravel models!

藏色散人
藏色散人forward
2020-10-12 14:10:342446browse

The following is the tutorial column of Laravel to introduce to you the simplest "one-to-one" relationship between Laravel models! , I hope it will be helpful to friends in need!

Let’s talk about the simplest “one-to-one” relationship between Laravel models!

Introduction

Relational database provides a very easy-to-use data association binding mode. Use SQL statements can easily perform related data queries and operations.

If all relationships are operated at the database level, it will be very inconvenient.

So, the laravel model provides association relationships, and this article will sort out those usages.

Code Time

We don’t want to read the manuscript like a PPT and list all the relationship models. That is not intuitive and not efficient for learning. Way.

Let’s start from the example and see what problem the association relationship solves and how to use it.

First is the preparation of the database. Assume that there is a field correspondence between the following two tables:

Let’s talk about the simplest “one-to-one” relationship between Laravel models!

Use the command line to create a Profile model and create a migration at the same time. File:

php artisan make:model Profile --migration

Let’s look at the contents of the generated app/Profile.php file:

namespace App;use Illuminate\Database\Eloquent\Model;class Profile extends Model {}

Because the –migration option is used, laravel automatically The database/migrations/2020_10_11_015236_create_profiles_table.php file is generated,

is used to generate the corresponding database profiles table.

Still the old rule, first implement the up method used for database migration:

public function up(){
    Schema::create('profiles', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->string('url');
        $table->string('telephone');
        $table->timestamps();
    });}

The method for rollback is not listed, it is just the deletion of the table. Manually execute the migration instructions below:

php artisan migrate

The output content is as follows:

Migrated: 2020_10_11_015236_create_profiles_table.php

Association

Everything is ready, let’s start Use associations to handle data consistency. A user corresponds to a profile, so this is a one-to-one relationship.

Add the following statement to the User model:

class User extends Model {
    public function profile()
    {
        return $this->hasOne('App\Profile');
    }}

Once the above method is defined, it can be called in a chain like this:

$user = User::find(1)->profile->telephone;

Let’s break it down and explain. First use User::find($id) to return an instance of the User model object.

This instance has a profile method, which is the above relationship statement.

Call profile What is returned is an instance of the Profile object, so you can continue to call the properties of the Profile, which is the origin of telephone.

It is important to note that similar to the following writing method, the return results are different:

$user = User::find($id);
$user->profile; // 返回 Profile 对象
$user->profile(); // 返回 hasOne 关联关系对象

When you use it, you must not be confused and know how to use it.

With associated queries, there will naturally be associated updates. The usage is as follows:

$profile = new Profile;
$profile->telephone = '12345678';
$user = User::find(1);
$user->profile()->save($profile);

With the write operation of associated updates, there will naturally be associated deletions and model method calls:

$user = User::find($id);
$user->profile()->delete();

Due to the strict one-to-one relationship, that is, a user has only one profile. If a user is deleted,

There will be a lonely profile left with no attachment.

In addition to the consistency guarantee in the program context, you can also use the foreign key of the database to delete the profile association when deleting the user. Then just modify the migration file,

and add the following content:

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

Write at the end

This article introduces the simplest " laravel model association" "One-on-one", we explained

how to delete resources consistently from a program perspective and a database perspective. More complex relationships are meaningful at the programming level. We will introduce more relationships in the next chapter.                                                                                                                

The above is the detailed content of Let’s talk about the simplest “one-to-one” relationship between Laravel models!. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete