>  기사  >  백엔드 개발  >  이름 일관성으로 인해 발생하는 Laravel 연관 모델 문제 laravel 비디오 튜토리얼 thinkphp php laravel

이름 일관성으로 인해 발생하는 Laravel 연관 모델 문제 laravel 비디오 튜토리얼 thinkphp php laravel

WBOY
WBOY원래의
2016-07-29 08:50:021497검색

1. 연관 모델 정의

Laravel에서는 다음 모델을 정의하여 연관 쿼리를 완성할 수 있습니다.

class MyPost extends Eloquent {
    public function myPostInfo () {
        return $this->hasOne('MyPostInfo');
    }
}

class MyPostInfo extends Eloquent {}

2. 연관 모델 사용

여기 myPostInfo()에서는 Camel 명명 규칙을 사용하지만 특정 PostInfo를 읽을 때 Snake 규칙을 사용할 수 있습니다. 다음 코드가 가능합니다:

$post = MyPost::find(1);
$post_info = $post->myPostInfo; // example 1
$post_info = $post->my_post_info; // example 2

Laravel은 위의 두 가지 방법을 허용하지만 두 가지 명명 방법을 사용하여 발생하는 충돌을 합리적으로 처리하지 않습니다.

3. 캐시 무효화

위의 두 가지 예를 동시에 사용하면 캐시 중 하나가 무효화됩니다. Model의 Relationship 변수에는 이미 읽어온 관련 Model이 캐싱되어 있는데, 다른 규칙을 가진 이름으로 읽으면 이전 캐쉬는 무효화됩니다. 예를 들어

$post_info = $post->myPostInfo; 
// $post->relations = [‘myPostInfo’ => ..];

$post_info = $post->my_post_info;
// $post->relations = [‘myPostInfo’ => …, ‘my_post_info’ => …];

따라서 캐시가 유효하지 않게 하려면 프로젝트에서 하나의 명명 방법만 사용하여 관계형 모델을 읽어야 합니다. Laravel에서는 Camel Case를 권장합니다.

4. toArray() 메소드가 유효하지 않습니다

두 가지를 동시에 사용하는 경우 Model::toArray()가 유효하지 않다는 또 다른 문제가 있습니다. 왜냐하면 toArray() 메소드는 relations에서 Snake Case라는 연관 모델을 먼저 검색하고, 없으면 Camel Case를 찾기 때문입니다.

따라서 toArray() 메서드를 사용하여 모델을 변환하는 경우 두 가지를 동시에 사용하지 마세요.

5. 만들기 쉬운 실수

가장 일반적으로 오류가 발생하기 쉬운 코드는 다음과 같습니다.

MyPost::with(‘myPostInfo’)->get();

With를 사용하여 모델을 연결하는 경우 메소드를 사용하고 정의해야 합니다. 동일한 이름의 키를 읽으려는 경우 이를 읽는 방법은 Camel Case의 키만 가능합니다. 다른 곳에서는 문제가 없는지 확인하기 위해

$my_post->myPostInfo;

만 사용할 수 있습니다.

위 내용은 Laravel 콘텐츠를 포함하여 Laravel의 연관 모델에서 이름 일관성으로 인해 발생하는 문제를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.