CakePHP与变量';型号';领域

CakePHP与变量';型号';领域,php,cakephp,Php,Cakephp,我对CakePHP中的belongsTo关系有问题 我有一个使用“actions”表的“Action”模型,它属于另外两个模型之一,即“Transaction”或“Tag”。其思想是,每当用户完成一个事务或添加一个标记时,就会创建一个动作模型来记录它。我已经完成了这部分工作,每当保存事务或标记时,aftersave()方法也会添加一个动作记录。当我尝试在动作模型上执行查找('all')时,问题出现了,相关事务或标记记录没有被返回 行动: id model model_id created 我想

我对CakePHP中的belongsTo关系有问题

我有一个使用“actions”表的“Action”模型,它属于另外两个模型之一,即“Transaction”或“Tag”。其思想是,每当用户完成一个事务或添加一个标记时,就会创建一个动作模型来记录它。我已经完成了这部分工作,每当保存事务或标记时,aftersave()方法也会添加一个动作记录。当我尝试在动作模型上执行查找('all')时,问题出现了,相关事务或标记记录没有被返回

行动:

id
model
model_id
created
我想我可以使用belongsTo关系中的“conditions”参数,如下所示:

<?php
class Action extends AppModel {

var $name = 'Action';
var $actsAs = array('Containable');
var $belongsTo = array(
    'Transaction' => array(
        'foreignKey' => 'model_id',
        'conditions' => array("Action.model"=>"Transaction")
    ),
    'User' => array(
        'fields' => array('User.username') 
    ),
    'Recommendation' => array(
        'conditions' => array("Action.model"=>"Recommendation"),
        'foreignKey' => 'model_id'
    )
);  
}
?>

但这不起作用


我是否遗漏了什么,我的关系是否有问题(我怀疑是这样)?在谷歌搜索了这个问题后,我发现了一个名为的东西,但我不确定这对我是否有帮助。

如果我是正确的,你想将数据自动保存到Actions表吗?也许其他用户会回答这是可能的,但据我所知,这是不可能的


查看模型回调“afterSave()”可能是个好主意。在这里,您可以在完成另一个查询后执行save()

如果我说的没错,您想将数据自动保存到Actions表吗?也许其他用户会回答这是可能的,但据我所知,这是不可能的


查看模型回调“afterSave()”可能是个好主意。在这里,您可以在完成另一个查询后执行save()

如果我理解正确,听起来多态行为是一个很好的答案。它允许您将give
操作
记录绑定到任何其他模型(在您的情况下是
事务
标记
)。如果随后检索一个
操作
——并提供内存服务(我只使用过一次)——那么关联的模型也将返回(假设使用了适当的
递归
设置)

例如,在最近的一个项目中,我构建了一个
Alert
模型。警报可以附加到任何型号。任何给定的警报记录都标识了它所属的模型和相应的记录ID:

class Alert extends AppModel {
  public $actsAs    = array (
    'Polymorphic' => array (
      'classField' => 'model',
      'foreignKey' => 'entity_id'
    )
  );

  # Additional model code
}
我的桌子是按照以下规格建造的:

CREATE TABLE alerts (
  id CHAR(36) NOT NULL,
  alert_template_id VARCHAR(255) NOT NULL,
  model VARCHAR(255) NOT NULL,
  entity_id CHAR(36) NOT NULL,
  valid_from BIGINT NULL,
  valid_to BIGINT NULL,
  replacement_keys TEXT NULL,
  active BOOL NOT NULL DEFAULT 0,
  created BIGINT NOT NULL,
  updated BIGINT NOT NULL,
  PRIMARY KEY(id),
  FOREIGN KEY(alert_template_id)
    REFERENCES alert_templates(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
)TYPE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

注意
实体id
模型
字段。对于每个
警报
记录,它们分别持有唯一的标识符和型号名称(例如
用户
)。听起来这将很好地满足您的需求。

如果我理解正确,那么多态行为似乎是一个很好的答案。它允许您将give
操作
记录绑定到任何其他模型(在您的情况下是
事务
标记
)。如果随后检索一个
操作
——并提供内存服务(我只使用过一次)——那么关联的模型也将返回(假设使用了适当的
递归
设置)

例如,在最近的一个项目中,我构建了一个
Alert
模型。警报可以附加到任何型号。任何给定的警报记录都标识了它所属的模型和相应的记录ID:

class Alert extends AppModel {
  public $actsAs    = array (
    'Polymorphic' => array (
      'classField' => 'model',
      'foreignKey' => 'entity_id'
    )
  );

  # Additional model code
}
我的桌子是按照以下规格建造的:

CREATE TABLE alerts (
  id CHAR(36) NOT NULL,
  alert_template_id VARCHAR(255) NOT NULL,
  model VARCHAR(255) NOT NULL,
  entity_id CHAR(36) NOT NULL,
  valid_from BIGINT NULL,
  valid_to BIGINT NULL,
  replacement_keys TEXT NULL,
  active BOOL NOT NULL DEFAULT 0,
  created BIGINT NOT NULL,
  updated BIGINT NOT NULL,
  PRIMARY KEY(id),
  FOREIGN KEY(alert_template_id)
    REFERENCES alert_templates(id)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
)TYPE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

注意
实体id
模型
字段。对于每个
警报
记录,它们分别持有唯一的标识符和型号名称(例如
用户
)。听起来这将很好地满足您的需求。

不,我已经为交易和推荐模型提供了aftersave功能。操作记录保存为查找。但是什么时候对动作模型进行查找(“全部”),我想引入关联的交易或推荐模型,这取决于它是哪种类型的动作。不,我已经为交易和推荐模型提供了aftersave功能。操作记录保存为查找。但是什么时候对动作模型进行查找(“全部”),我想引入关联的交易或推荐模型,这取决于它是哪种类型的动作。回答得好,Rob!我想读更多的《哦,PM行为》,所以我看了一下《面包店》,下面是链接:非常感谢。这正是我所希望的答案。谢谢你添加链接,特拉维斯。我确信在我的回答中我已经链接到了它,但它似乎没有。谢谢你纠正这个问题。回答得好,罗伯!我想读更多的《哦,PM行为》,所以我看了一下《面包店》,下面是链接:非常感谢。这正是我所希望的答案。谢谢你添加链接,特拉维斯。我确信在我的回答中我已经链接到了它,但它似乎没有。我感谢你纠正这一点。