Home > PHP Framework > Laravel > 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!

藏色散人
Release: 2020-10-12 14:10:34
forward
2522 people have browsed it

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:

Lets 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
Copy after login

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

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

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();
    });}
Copy after login

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

php artisan migrate
Copy after login

The output content is as follows:

Migrated: 2020_10_11_015236_create_profiles_table.php
Copy after login

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');
    }}
Copy after login

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

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

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 关联关系对象
Copy after login

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);
Copy after login

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

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

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');
Copy after login

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!

Related labels:
source:learnku.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template