我正在使用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版本使用得更广泛,但我的理解是它们的工作方式相同,只是语法不同。
答案 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'),
);