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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.