我有一个实体,让我们称之为'机器',它有一组实体从中取名。这些字段中至少有一个是必需的,但可以设置多个字段。因此,在下面的示例中,如果未设置主机名和IP,则应该是服务标签。我使用Propel 1.5作为ORM。
machine:
id: ~
hostname: {type: varchar(255)}
ip: {type: varchar(255)}
service_tag: {type: varchar(255)}
有关multi-column constraints的文章让我想知道是否可以添加required(hostname, mac, service_tag)
之类的内容。如果是这种情况,我将如何以.yml格式为Propel完成此工作?
答案 0 :(得分:0)
At least one of these [three] fields is required
您可以连接三个,首先将null转换为空字符串:
CONCAT( ifnull(host,'') , ifnull(ip,'') , ifnull(tag,'') )
然后这个约束:
length( CONCAT( ifnull(host,'') , ifnull(ip,'') , ifnull(tag,'') ) ) > 0
如果mySQL支持检查约束。
答案 1 :(得分:0)
考虑这个问题:
SELECT *
FROM machine
WHERE hostname IS NULL
AND ip IS NULL
AND service_tag IS NULL;
如果此结果集不是空集,则违反业务规则。因此,创建一个测试它的约束或触发器。
答案 2 :(得分:0)
我认为用symfony和推动它是不可能的。但是你可以设置你的symfony表单,它需要三列之一。