>  기사  >  백엔드 개발  >  ThinkPHP의 연관 모델

ThinkPHP의 연관 모델

不言
不言원래의
2018-06-07 17:10:493102검색

ThinkPHP 연관 모델 운용 예시 분석, 필요한 친구들은 참고하면 됩니다

보통 우리가 이야기하는 연관 관계는 다음 세 가지 유형이 있습니다.
◇ 일대일 연관: ONE_TO_ONE, HAS_ONE 및 BELONGS_TO 포함
◇ One- 대다 연관: ONE_TO_MANY, HAS_MANY 및 BELONGS_TO 포함
◇ 다대다 연관: MANY_TO_MANY
연관 정의
데이터 테이블의 연관 CURD 연산 현재 지원되는 관계에는 HAS_ONE, BELONGS_TO, HAS_MANY, MANY_TO_MANY
모델은 비즈니스 모델의 복잡성에 따라 달라집니다. 여러 연관을 제한 없이 동시에 정의할 수 있습니다. 모든 연관 정의는 모델 클래스의 $_link 멤버 변수에 정의되며 동적 정의를 지원할 수 있습니다. 연관 작업을 지원하려면 모델 클래스가 RelationModel 클래스를 상속해야 합니다. 연관 정의 형식은 다음과 같습니다.

protected $_link = array( 
' 关联 1' => array( 
' 关联属性 1' => ' 定义 ', 
' 关联属性 N' => ' 定义 ', 
), 
' 关联 2' => array( 
' 关联属性 1' => ' 定义 ', 
' 关联属性 N' => ' 定义 ', 
), 
... 
);

HAS_ONE 연관 메서드 정의:

class UserModel extends RelationModel 
{ 
public $_link = array( 
'Profile'=> array( 
'mapping_type' =>HAS_ONE, 
'class_name'=>'Profile', 
// 定义更多的关联属性 
…… 
) , 
); 
}

mapping_type 연관 유형은 다음에서 HAS_ONE 상수를 사용하여 정의해야 합니다. HAS_ONE 연결.
class_name 연결할 모델 클래스의 이름
mapping_name 데이터를 얻는 데 사용되는 연결된 매핑 이름
foreign_key 연결된 외래 키 이름
condition 연결된 조건
mapping_fields 쿼리할 필드 연결
as_fields 연결된 필드 값을 직접 매핑 ​​데이터 개체로
BELONGS_TO의 필드 연결 방법 정의:

'Dept'=> array( 
'mapping_type'=>BELONGS_TO, 
'class_name'=>'Dept', 
'foreign_key'=>'userId', 
'mapping_name'=>'dept', 
// 定义更多的关联属性 
…… 
) ,

class_name 연결할 모델 클래스 이름
mapping_name 데이터를 얻는 데 사용되는 연결된 매핑 이름
foreign_key 연결된 외래 키 이름
mapping_fields 연결된 쿼리할 필드
condition 연관 조건
parent_key 연관된 필드 자체 참조
as_fields 연관된 필드 값을 데이터 객체의 필드에 직접 매핑
HAS_MANY 연관 방법 정의:

'Article'=> array( 
'mapping_type' =>HAS_MANY, 
'class_name'=>'Article', 
'foreign_key'=>'userId', 
'mapping_name'=>'articles', 
'mapping_order'=>'create_time desc', 
// 定义更多的关联属性 
…… 
) ,

class_name 연관될 모델 클래스 이름
mapping_name
foreign_key를 사용하여 데이터를 얻는 데 사용되는 관련 매핑 이름 관련 외래 키 이름
parent_key 자체 참조 관련 관련 필드
조건 관련 조건
mapping_fields 쿼리할 관련 필드
mapping_limit 연결에서 반환할 레코드 수
mapping_order 연관 쿼리 정렬
MANY_TO_MANY 연관 방법 정의:

"Group"=>array( 
'mapping_type'=>MANY_TO_MANY, 
'class_name'=>'Group', 
'mapping_name'=>'groups', 
'foreign_key'=>'userId', 
'relation_foreign_key'=>'goupId', 
'relation_table'=>'think_gourpUser' 
)

class_name 연관될 모델 클래스 이름
mapping_name 데이터를 얻는 데 사용되는 연관된 매핑 이름
foreign_key 연관된 외래 키 이름
relation_foreign_key 연관된 테이블의 외래 키 이름
mapping_limit 연관에 의해 반환될 레코드 수
mapping_order 관계형 쿼리 정렬
relation_table 다대다 중간 관계형 테이블 이름
관계형 쿼리
관계 메서드를 사용하여 관계 연산을 수행할 수 있습니다. 모든 상관 작업이 제어되도록 로컬 상관 작업도 제어합니다.

$User = D( "User" ); 
$user = $User->realtion(true)->find(1);

출력된 $user 결과는 다음과 유사한 데이터일 수 있습니다.

array( 
'id'=>1, 
'account'=>'ThinkPHP', 
'password'=>'123456', 
'Profile'=> array( 
'email'=>'liu21st@gmail.com', 
'nickname'=>'流年', 
) , 
)

Associated writing

$User = D( "User" ); 
$data = array(); 
$data["account"]="ThinkPHP"; 
$data["password"]="123456"; 
$data["Profile"]=array( 
'email'=>'liu21st@gmail.com', 
'nickname' =>' 流年 ', 
) ; 
$result = $User->relation(true)->add($user);

이렇게 하면 연관된 프로필 데이터가 자동으로 작성됩니다.
Association 업데이트

$User = D( "User" ); 
$data["account"]= "ThinkPHP"; 
$data["password"]= "123456"; 
$data["Profile"]=array( 
'email'=>'liu21st@gmail.com', 
'nickname' =>' 流年 ', 
) ; 
$result =$User-> relation(true)->where(‘id=3')->save($data);

Association 삭제

$result =$User->relation(true)->delete( "3" );

이상은 이 글의 전체 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 추천:

[ThinkPHP] 관련 쿼리 질문

위 내용은 ThinkPHP의 연관 모델의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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