Phalcon:在1-1关系中,hasOne和belongsTo有什么区别?

时间:2014-07-13 05:18:25

标签: php model relationship phalcon

我有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吗? 谢谢你的帮助! : - )

3 个答案:

答案 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