> PHP 프레임워크 > Laravel > Laravel 모델 간의 가장 간단한 '일대일' 관계에 대해 이야기해 보겠습니다!

Laravel 모델 간의 가장 간단한 '일대일' 관계에 대해 이야기해 보겠습니다!

藏色散人
풀어 주다: 2020-10-12 14:10:34
앞으로
2519명이 탐색했습니다.

튜토리얼 칼럼과 Laravel 모델 연관 중 가장 간단한 "일대일"입니다! , 도움이 필요한 친구들에게 도움이 되길 바랍니다!

Laravel 모델 간의 가장 간단한 '일대일' 관계에 대해 이야기해 보겠습니다!

소개

관계형 데이터베이스는 매우 사용하기 쉬운 데이터 연관 바인딩 모드를 제공하며, SQL 문을 사용하여 관련 데이터를 쉽게 쿼리하고 연산할 수 있습니다. 모든 관계를 데이터베이스 수준에서 운영한다면 매우 불편할 것입니다.

그래서 laravel 모델은 연관 관계를 제공하며, 이번 글에서는 그러한 사용법을 정리하겠습니다.

코딩 시간

우리는 원고를 PPT처럼 읽고 모든 관계 모델을 나열하고 싶지 않습니다. 이는 직관적이지 않고 효율적인 학습 방법이 아닙니다. 연관관계가 어떤 문제를 해결하고 어떻게 활용하는지 예시부터 살펴보겠습니다.

먼저 데이터베이스 준비입니다. 다음 두 테이블 사이에 필드 대응이 있다고 가정합니다.

명령줄을 사용하여 프로필 모델을 생성하고 동시에 마이그레이션 파일을 생성합니다.

php artisan make:model Profile --migration
로그인 후 복사
Laravel 모델 간의 가장 간단한 일대일 관계에 대해 이야기해 보겠습니다! 생성된 app/Profile을 살펴보세요. php

파일의 내용:

namespace App;use Illuminate\Database\Eloquent\Model;class Profile extends Model {}
로그인 후 복사

–migration 옵션을 사용했기 때문에 laravel은

database/migrations/2020_10_11_015236_create_profiles_table.php

파일을 자동으로 생성했습니다. 해당 데이터베이스 profiles 테이블을 생성합니다. 여전히 기존 규칙에 따라 먼저 데이터베이스 마이그레이션에 사용되는

up

메서드를 구현하세요.

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();
    });}
로그인 후 복사
롤백 방법은 나열되지 않으며 테이블만 삭제됩니다. 아래 마이그레이션 지침을 수동으로 실행하세요.

php artisan migrate
로그인 후 복사

출력 내용은 다음과 같습니다.

Migrated: 2020_10_11_015236_create_profiles_table.php
로그인 후 복사

연관 관계

모든 것이 준비되었습니다. 데이터 일관성을 처리하기 위해 연관 관계를 사용하기 시작합니다. 사용자는 프로필에 해당하므로 이는 일대일 관계입니다. 사용자 모델에 다음 명령문을 추가하세요.

class User extends Model {
    public function profile()
    {
        return $this->hasOne('App\Profile');
    }}
로그인 후 복사
위 메서드가 정의되면 다음과 같이 체인에서 호출할 수 있습니다.

$user = User::find(1)->profile->telephone;
로그인 후 복사
분해해서 설명해보자. 먼저

User::find($id)

를 사용하여 User 모델 객체의 인스턴스를 반환합니다.

이 인스턴스에는 위의 관계 설명인

profile

메소드가 있습니다.

Calling profile

은 Profile 객체의 인스턴스를 반환하므로 전화의 근원이 되는 Profile의 속성을 계속해서 호출할 수 있습니다.

다음 작성 방법과 비슷하지만 반환 결과가 다르다는 점에 유의하는 것이 중요합니다.

$user = User::find($id);
$user->profile; // 返回 Profile 对象
$user->profile(); // 返回 hasOne 关联关系对象
로그인 후 복사

사용할 때 헷갈리지 말고 사용법을 숙지하고 사용하세요.

연관된 쿼리에는 자연스럽게 연관된 업데이트가 있습니다. 사용법은 다음과 같습니다.

$profile = new Profile;
$profile->telephone = '12345678';
$user = User::find(1);
$user->profile()->save($profile);
로그인 후 복사

연관된 업데이트와 같은 쓰기 작업에는 자연스럽게 연관된 삭제 및 모델 메서드 호출이 있습니다.

$user = User::find($id);
$user->profile()->delete();
로그인 후 복사

엄밀히 말하면 1-이기 때문입니다. 즉, 사용자는 하나의 프로필만 갖게 됩니다. 사용자가 삭제되면

첨부 파일이 없는 외로운 프로필만 남게 됩니다.

프로그램 컨텍스트의 일관성 보장 외에도 사용자 삭제 시 데이터베이스의 외래 키를 사용하여 프로필 연결을 삭제할 수도 있습니다. 그런 다음 마이그레이션 파일을 수정하고

다음 내용을 추가하세요.

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
로그인 후 복사

Written at the end

이 글에서는 laravel 모델의 가장 간단한 "일대일" 연관을 소개합니다. 프로그램 관점에서 설명합니다. 그리고 데이터베이스 관점

리소스 삭제시 일관되게 삭제하는 방법. 프로그래밍 수준에서는 더 복잡한 관계가 의미가 있습니다. 다음 장에서 더 많은 관계를 소개하겠습니다. ㅋㅋㅋ

위 내용은 Laravel 모델 간의 가장 간단한 '일대일' 관계에 대해 이야기해 보겠습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿