ActiveRecord - 将外键与不同的命名约定相关联?

时间:2011-10-31 03:15:17

标签: php codeigniter activerecord

我正在使用PHP-ActiveRecord ORM处理私人消息系统。我有称为“用户”和“消息”的模型,称为“用户”和“消息”的MySQL表,在消息表中,我有称为“sender_id”和“recipient_id”的字段。但是,我不知道如何正确地将发件人和收件人关联到用户模型。

这是我目前在用户模型中所拥有的:

static $has_many = array(
    array('messages'),
    array('recipients', 'foreign_key' => 'recipient_id', 'class_name' => 'Message'),
    array('senders', 'foreign_key' => 'sender_id', 'class_name' => 'Message'),
);

这就是我目前在Message模型中所拥有的:

static $belongs_to = array(
    array('sender', 'class_name' => 'User'),
    array('recipient', 'class_name' => 'User'),
);

但是,当我运行诸如$ message-> recipient-> first_name之类的代码时,它无法正确地从User模型中提取第一个名称,就像我想要的那样。我不确定我做错了什么。

通常,我只使用标准命名约定。但是,对于这个例子,我们必须有sender_id和recipient_id,它们都是相同的类型,所以我不能像我一直那样使用标准的命名约定。

任何帮助都将受到高度赞赏。我正在使用PHP-ActiveRecord ORM。我认为Rails版本使用得更广泛,但我的理解是它们的工作方式相同,只是语法不同。

1 个答案:

答案 0 :(得分:1)

您还需要在$ belongs_to中指定外键,否则将从表名中推断出它们(即user_id):

static $belongs_to = array(
   array('sender', 'class_name' => 'User', 'foreign_key' => 'sender_id'),
   array('recipient', 'class_name' => 'User', 'foreign_key' => 'recipient_id'),
);