我有2张桌子(2个型号)
User
-uid
-email
-password
-(other fields)
Profile
-uid
-name
-age
-phone
-(other fields)
他们有1-1关系,我实现了如下关系:
class User extends Model
{
public function initialize()
{
$this->hasOne('uid', 'Profile', 'uid');
}
}
class Profile extends Model
{
public function initialize()
{
$this->hasOne('uid', 'User', 'uid');
}
}
这个实现是对的吗?我可以用belongsTo替换hasOne吗? 谢谢你的帮助! : - )
答案 0 :(得分:0)
hasOne在父模型中定义,而belongsTo在子模型中定义。
用户hasOne个人资料,该个人资料属于一个用户。
您案件的正确关系定义如下:
class User extends Model
{
public function initialize()
{
$this->hasOne('uid', 'Profile', 'uid');
}
}
class Profile extends Model
{
public function initialize()
{
$this->belongsTo('uid', 'User', 'uid');
}
}
答案 1 :(得分:0)
import React, { Component } from "react";
import equal from "fast-deep-equal";
const propsWithoutLocation = props => {
const { location, ...rest } = props;
return rest;
};
export default CartHolder => {
shouldComponentUpdate(nextProps) {
if (equal(propsWithoutLocation(nextProps), propsWithoutLocation(this.props))) {
return false;
}
return true;
}
使用hasOne()可以获得用户的地址。
class User extends Model
{
// Get the phone record associated with the user.
public function address()
{
return $this->hasOne('id', 'App\Address', 'id');
}
}
...
class Address extends Model
{
// Get the user lives here.
public function user()
{
return $this->belongsTo('id', 'App\User', 'id');
}
}
如果您有用户地址,则可以通过belongsTo()获取用户。
$address = User::find(1)->address;
答案 2 :(得分:0)
嗯,已经有一段时间了,但是我在问同样的事情。总体而言,它们看起来像定义了相同的关系,但是没有定义,并且存在一些行为差异。
如另一个答案中所述,正确的关系应为:
class User extends Model
{
public function initialize()
{
$this->hasOne('uid', 'Profile', 'uid');
}
}
class Profile extends Model
{
public function initialize()
{
$this->belongsTo('uid', 'User', 'uid');
}
}
例如,当与相关实体一起使用时,Phalcon模型会处理相关实体的ID分配。以下代码段在且仅当正确设置了关系时才有效:
$user = new User();
$user->profile = new Profile();
$user->save();
在这种情况下,您无需指定uid值并将其保存为相关实体。
在文档中没有太多关于此的内容。但是,如果您有兴趣,可以阅读phalcon来源。 https://github.com/phalcon/cphalcon/blob/master/phalcon/Mvc/Model.zep