ThinkPHP關(guān)聯(lián)模型操作實(shí)例分析
Jun 13, 2016 am 11:58 AM
通常我們所說(shuō)的關(guān)聯(lián)關(guān)系包括下面三種:
◇ 一對(duì)一關(guān)聯(lián) : ONE_TO_ONE , 包括 HAS_ONE 和 BELONGS_TO
◇ 一對(duì)多關(guān)聯(lián) : ONE_TO_MANY , 包括 HAS_MANY 和 BELONGS_TO
◇ 多對(duì)多關(guān)聯(lián) : MANY_TO_MANY
關(guān)聯(lián)定義
數(shù)據(jù)表的關(guān)聯(lián) CURD 操作,目前支持的關(guān)聯(lián)關(guān)系包括下面四種:HAS_ONE 、 BELONGS_TO 、 HAS_MANY 、 MANY_TO_MANY 。
一個(gè)模型根據(jù)業(yè)務(wù)模型的復(fù)雜程度可以同時(shí)定義多個(gè)關(guān)聯(lián),不受限制,所有的關(guān)聯(lián)定義都統(tǒng)一在模型類(lèi)的 $_link 成員變量里面定義,并且可以支持動(dòng)態(tài)定義。要支持關(guān)聯(lián)操作,模型類(lèi)必須繼承 RelationModel 類(lèi),關(guān)聯(lián)定義的格式是:
復(fù)制代碼 代碼如下:
protected $_link = array(
' 關(guān)聯(lián) 1' => array(
' 關(guān)聯(lián)屬性 1' => ' 定義 ',
' 關(guān)聯(lián)屬性 N' => ' 定義 ',
),
' 關(guān)聯(lián) 2' => array(
' 關(guān)聯(lián)屬性 1' => ' 定義 ',
' 關(guān)聯(lián)屬性 N' => ' 定義 ',
),
...
);
HAS_ONE 關(guān)聯(lián)方式的定義:
復(fù)制代碼 代碼如下:
class UserModel extends RelationModel
{
public $_link = array(
'Profile'=> array(
'mapping_type' =>HAS_ONE,
'class_name'=>'Profile',
// 定義更多的關(guān)聯(lián)屬性
……
) ,
);
}
mapping_type 關(guān)聯(lián)類(lèi)型,這個(gè)在 HAS_ONE 關(guān)聯(lián)里面必須使用 HAS_ONE 常量定義。
class_name 要關(guān)聯(lián)的模型類(lèi)名
mapping_name 關(guān)聯(lián)的映射名稱(chēng),用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱(chēng)
condition 關(guān)聯(lián)條件
mapping_fields 關(guān)聯(lián)要查詢(xún)的字段
as_fields 直接把關(guān)聯(lián)的字段值映射成數(shù)據(jù)對(duì)象中的某個(gè)字段
BELONGS_TO 關(guān)聯(lián)方式的定義:
復(fù)制代碼 代碼如下:
'Dept'=> array(
'mapping_type'=>BELONGS_TO,
'class_name'=>'Dept',
'foreign_key'=>'userId',
'mapping_name'=>'dept',
// 定義更多的關(guān)聯(lián)屬性
……
) ,
class_name 要關(guān)聯(lián)的模型類(lèi)名
mapping_name 關(guān)聯(lián)的映射名稱(chēng),用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱(chēng)
mapping_fields 關(guān)聯(lián)要查詢(xún)的字段
condition 關(guān)聯(lián)條件
parent_key 自引用關(guān)聯(lián)的關(guān)聯(lián)字段
as_fields 直接把關(guān)聯(lián)的字段值映射成數(shù)據(jù)對(duì)象中的某個(gè)字段
HAS_MANY 關(guān)聯(lián)方式的定義:
復(fù)制代碼 代碼如下:
'Article'=> array(
'mapping_type' =>HAS_MANY,
'class_name'=>'Article',
'foreign_key'=>'userId',
'mapping_name'=>'articles',
'mapping_order'=>'create_time desc',
// 定義更多的關(guān)聯(lián)屬性
……
) ,
class_name 要關(guān)聯(lián)的模型類(lèi)名
mapping_name 關(guān)聯(lián)的映射名稱(chēng),用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱(chēng)
parent_key 自引用關(guān)聯(lián)的關(guān)聯(lián)字段
condition 關(guān)聯(lián)條件
mapping_fields 關(guān)聯(lián)要查詢(xún)的字段
mapping_limit 關(guān)聯(lián)要返回的記錄數(shù)目
mapping_order 關(guān)聯(lián)查詢(xún)的排序
MANY_TO_MANY 關(guān)聯(lián)方式的定義:
復(fù)制代碼 代碼如下:
"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 要關(guān)聯(lián)的模型類(lèi)名
mapping_name 關(guān)聯(lián)的映射名稱(chēng),用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱(chēng)
relation_foreign_key 關(guān)聯(lián)表的外鍵名稱(chēng)
mapping_limit 關(guān)聯(lián)要返回的記錄數(shù)目
mapping_order 關(guān)聯(lián)查詢(xún)的排序
relation_table 多對(duì)多的中間關(guān)聯(lián)表名稱(chēng)
關(guān)聯(lián)查詢(xún)
使用 relation 方法進(jìn)行關(guān)聯(lián)操作, relation 方法不但可以啟用關(guān)聯(lián)還可以控制局部關(guān)聯(lián)操作,實(shí)現(xiàn)了關(guān)聯(lián)操作一切盡在掌握之中。
$User = D( "User" );
$user = $User->realtion(true)->find(1);
輸出 $user 結(jié)果可能是類(lèi)似于下面的數(shù)據(jù):
復(fù)制代碼 代碼如下:
array(
'id'=>1,
'account'=>'ThinkPHP',
'password'=>'123456',
'Profile'=> array(
'email'=>'liu21st@gmail.com',
'nickname'=>'流年',
) ,
)
關(guān)聯(lián)寫(xiě)入
復(fù)制代碼 代碼如下:
$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);
這樣就會(huì)自動(dòng)寫(xiě)入關(guān)聯(lián)的 Profile 數(shù)據(jù)。
關(guān)聯(lián)更新
復(fù)制代碼 代碼如下:
$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);
關(guān)聯(lián)刪除
$result =$User->relation(true)->delete( "3" );

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Boston Dynamics Atlas officially enters the era of electric robots! Yesterday, the hydraulic Atlas just "tearfully" withdrew from the stage of history. Today, Boston Dynamics announced that the electric Atlas is on the job. It seems that in the field of commercial humanoid robots, Boston Dynamics is determined to compete with Tesla. After the new video was released, it had already been viewed by more than one million people in just ten hours. The old people leave and new roles appear. This is a historical necessity. There is no doubt that this year is the explosive year of humanoid robots. Netizens commented: The advancement of robots has made this year's opening ceremony look like a human, and the degree of freedom is far greater than that of humans. But is this really not a horror movie? At the beginning of the video, Atlas is lying calmly on the ground, seemingly on his back. What follows is jaw-dropping

Imagine an artificial intelligence model that not only has the ability to surpass traditional computing, but also achieves more efficient performance at a lower cost. This is not science fiction, DeepSeek-V2[1], the world’s most powerful open source MoE model is here. DeepSeek-V2 is a powerful mixture of experts (MoE) language model with the characteristics of economical training and efficient inference. It consists of 236B parameters, 21B of which are used to activate each marker. Compared with DeepSeek67B, DeepSeek-V2 has stronger performance, while saving 42.5% of training costs, reducing KV cache by 93.3%, and increasing the maximum generation throughput to 5.76 times. DeepSeek is a company exploring general artificial intelligence

ThinkPHP has multiple versions designed for different PHP versions. Major versions include 3.2, 5.0, 5.1, and 6.0, while minor versions are used to fix bugs and provide new features. The latest stable version is ThinkPHP 6.0.16. When choosing a version, consider the PHP version, feature requirements, and community support. It is recommended to use the latest stable version for best performance and support.

The latest video of Tesla's robot Optimus is released, and it can already work in the factory. At normal speed, it sorts batteries (Tesla's 4680 batteries) like this: The official also released what it looks like at 20x speed - on a small "workstation", picking and picking and picking: This time it is released One of the highlights of the video is that Optimus completes this work in the factory, completely autonomously, without human intervention throughout the process. And from the perspective of Optimus, it can also pick up and place the crooked battery, focusing on automatic error correction: Regarding Optimus's hand, NVIDIA scientist Jim Fan gave a high evaluation: Optimus's hand is the world's five-fingered robot. One of the most dexterous. Its hands are not only tactile

Earlier this month, researchers from MIT and other institutions proposed a very promising alternative to MLP - KAN. KAN outperforms MLP in terms of accuracy and interpretability. And it can outperform MLP running with a larger number of parameters with a very small number of parameters. For example, the authors stated that they used KAN to reproduce DeepMind's results with a smaller network and a higher degree of automation. Specifically, DeepMind's MLP has about 300,000 parameters, while KAN only has about 200 parameters. KAN has a strong mathematical foundation like MLP. MLP is based on the universal approximation theorem, while KAN is based on the Kolmogorov-Arnold representation theorem. As shown in the figure below, KAN has

Ollama is a super practical tool that allows you to easily run open source models such as Llama2, Mistral, and Gemma locally. In this article, I will introduce how to use Ollama to vectorize text. If you have not installed Ollama locally, you can read this article. In this article we will use the nomic-embed-text[2] model. It is a text encoder that outperforms OpenAI text-embedding-ada-002 and text-embedding-3-small on short context and long context tasks. Start the nomic-embed-text service when you have successfully installed o

Target detection is a relatively mature problem in autonomous driving systems, among which pedestrian detection is one of the earliest algorithms to be deployed. Very comprehensive research has been carried out in most papers. However, distance perception using fisheye cameras for surround view is relatively less studied. Due to large radial distortion, standard bounding box representation is difficult to implement in fisheye cameras. To alleviate the above description, we explore extended bounding box, ellipse, and general polygon designs into polar/angular representations and define an instance segmentation mIOU metric to analyze these representations. The proposed model fisheyeDetNet with polygonal shape outperforms other models and simultaneously achieves 49.5% mAP on the Valeo fisheye camera dataset for autonomous driving

Project link written in front: https://nianticlabs.github.io/mickey/ Given two pictures, the camera pose between them can be estimated by establishing the correspondence between the pictures. Typically, these correspondences are 2D to 2D, and our estimated poses are scale-indeterminate. Some applications, such as instant augmented reality anytime, anywhere, require pose estimation of scale metrics, so they rely on external depth estimators to recover scale. This paper proposes MicKey, a keypoint matching process capable of predicting metric correspondences in 3D camera space. By learning 3D coordinate matching across images, we are able to infer metric relative
