【问题标题】:ActiveRecord - associating foreign keys with different naming conventions?ActiveRecord - 将外键与不同的命名约定相关联?
【发布时间】:2012-03-15 20:36:41
【问题描述】:

我正在使用 PHP-ActiveRecord ORM 开发一个私人消息系统。我有名为“用户”和“消息”的模型,名为“用户”和“消息”的 MySQL 表,在消息表中,我有名为“发送者 ID”和“接收者 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'),
);

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

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

【问题讨论】:

  • 不用担心...对于未来,您不必接受对您提出的每一个问题的回答,只需回答那些为您的问题提供适当解决方案的问题

标签: php codeigniter activerecord


【解决方案1】:

还需要在$belong_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'),
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2012-06-21
    • 2018-07-07
    相关资源
    最近更新 更多