到目前为止,我的数据库中设置了 3 个表:
用户 / User_Profiles / 地址
地址表用于存储来自用户以及最终来自公司等的未来地址。User_Profiles 表包含有关不涉及地址的用户的更多信息。
Users Table:
id | username | password | etc....
User_Profiles:
id | user_id | phone | website | bio | address_id | shipping_address_id
Addresses
id | address | city | state | zip | etc...
这是我的问题。我想通过 id 找到一个用户,然后返回他的所有信息——他来自 user_profiles 的信息和他来自地址的信息(address_id 和 shipping_address_id 都指向地址表)。
在我的模型中,我目前有这个:
public function getUserInfo($user_id){
return $this->find()
->contain(['user_profiles'=>['fields'=>['user_id','phone_number', 'website', 'bio', ]]])
->where(['id' => $user_id])
->first();
}
这很简单,并返回我的 user_profile 信息。现在我需要加入地址表(我猜是两次?)以获取送货地址和常规地址(通过 shipping_address_id 和 address_id)。
我怎样才能做到这一点?我想我可以使用 TableRegistry 加载 user_profiles 表以将 address_id 和 shipping_address_id 存储为变量,然后从那里开始工作,但这似乎过于复杂。
理想情况下,我希望在一个对象中返回所有信息 - user_profile 信息以及任何关联的地址。