在SQL中需要一组字段之一

时间:2011-08-18 11:23:40

标签: mysql sql symfony1 yaml propel

我有一个实体,让我们称之为'机器',它有一组实体从中取名。这些字段中至少有一个是必需的,但可以设置多个字段。因此,在下面的示例中,如果未设置主机名和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完成此工作?

3 个答案:

答案 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表单,它需要三列之一。