웅변적인 관계 설명(예시 포함)
$post->author->name;
게시물 작성자의 이름을 알려드립니다.
이것은 Eloquent 관계의 예입니다. 관계는 모델(테이블)이 연결되는 방식을 정의합니다. 대부분은 이해하기 쉽지만 몇 가지 더 복잡한 것이 있습니다.
이 포스트에서, 나는 모든 관계가 어떻게 작동하는지 보여줄 것입니다.
일대일(하나 있음)
이 예에서는
User
와 Address
의 두 가지 모델이 있습니다. User
모델은 이름, 이메일 주소 및 비밀번호와 같은 정보를 보유하고 Address
모델은 국가, 주, 도시 등과 같은 정보를 보유합니다.User
는 1개Address
Address
는 User
에 속한다다음과 같은 테이블 구조를 가질 수 있습니다.
users
id - integer
name - string
email - string
password - string
address
id - integer
country - string
city - string
user_id - integer
이러한 관계를 다음과 같이 정의할 수 있습니다.
// app/Models/User.php
public function address()
{
return $this->hasOne(Address::class);
}
이제
$user->address->city
를 사용하여 사용자의 주소에 액세스할 수 있습니다.참고: 이것이 작동하려면
Address
모델에 user_id
열이 있어야 합니다.역(~에 속함)
Address
가 있고 해당하는 User
를 찾으려면 다음 관계를 정의하십시오.// app/Models/Address.php
public function user()
{
return $this->belongsTo(User::class);
}
일대다(많다)
이 예에는
Post
와 Category
의 두 가지 모델이 있습니다.Post
는 Category
에 속한다Category
는 많다Post
s그리고 우리는 다음과 같은 테이블 구조를 가지고 있습니다:
categories
id - integer
name - string
posts
id - integer
title - string
category_id - integer
이 관계를 다음과 같이 정의할 수 있습니다.
// app/Models/Category.php
public function posts()
{
return $this->hasMany(Post::class);
}
다음과 같이 모든 게시물에 액세스할 수 있습니다.
foreach($category->posts as $post) {
//
}
참고: 이것이 작동하려면
Post
모델에 category_id
열이 있어야 합니다.다대일(소속)
이 예에는
Post
와 Category
의 두 가지 모델이 있습니다.Post
는 Category
에 속한다Category
는 많다Post
s그리고 우리는 다음과 같은 테이블 구조를 가지고 있습니다:
categories
id - integer
name - string
posts
id - integer
title - string
category_id - integer
이 관계를 다음과 같이 정의할 수 있습니다.
// app/Models/Post.php
public function category()
{
return $this->belongsTo(Category::class);
}
그리고 다음과 같이
Post
의 범주에 액세스할 수 있습니다.$post->category->name;
통해 많은
이 관계는 조금 더 어렵습니다. 이 예에는
Author
, a Post
, Language
의 세 가지 모델이 있습니다.Post
는 Author
에 속한다Author
이 많다Post
Author
은 Language
(언어를 구사) Language
는 많다Author
s예를 들어 다음은 테이블 구조입니다.
languages
id - integer
name - string
authors
id - integer
name - string
language_id - integer
posts
id - integer
title - string
author_id - integer
특정 언어로 된 모든 게시물을 얻으려면 다음 관계를 정의할 수 있습니다.
// app/Models/Language.php
public function posts()
{
return $this->hasManyThrough(Post::class, User::class);
}
이제 다음을 사용하여 모든 게시물을 가져올 수 있습니다.
foreach($language->posts as $post) {
//
}
역
이제
Language
의 Post
를 얻으려면 다음과 같이 하면 됩니다.$post->user->language->name;
다대다(다수에게 속함)
이 예에는
Product
와 Tag
의 두 가지 모델이 있습니다.Product
는 많다Tag
sTag
는 많다Product
s그리고 우리는 다음과 같은 테이블 구조를 가질 수 있습니다:
products
id - integer
name - string
price - integer
tags
id - integer
name - string
product_tag
product_id - integer
tag_id - integer
참고: 테이블 구조에는 세 번째 테이블인
product_tag
가 있습니다. 이 테이블은 제품을 태그에 연결합니다.이제 다음과 같이 관계를 정의할 수 있습니다.
// app/Models/Product.php
public function tags()
{
return $this->belongsToMany(Tag::class);
}
// app/Models/Tag.php
public function products()
{
return $this->belongsToMany(Product::class);
}
이제 다음을 사용하여 모든 태그/제품을 가져올 수 있습니다.
foreach($product->tags as $tag) {
//
}
foreach($tag->products as $product) {
//
}
다음 포스팅에서는 다형성 관계가 무엇인지, 어떻게 사용하는지 보여드리겠습니다. 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(웅변적인 관계 설명(예시 포함)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jeroenvanrensen/eloquent-relationships-explained-with-examples-4k2o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)