如何添加 Null 值以匹配 UNION CAKEPHP 4 中的列

How to add Null value to match the columns in UNION CAKEPHP 4

NULL 在尝试匹配第一个 table 中的列数时,这给了我 SQL 语法,但是 0 可以正常工作,而不是 NULL

示例代码

    $a = $table_a
    ->find()
    ->select(['id', 'first_name', 'last_name'])


    $b = $table_b
    ->find()
    ->select(['id', 'first_name', NULL])


    $union = $b->union($a);

通常您不能在 select 列表中使用 PHP NULL,因为在编译 SQL 和 [=24] 时该值用于字符串连接=] 会将 NULL 转换为空字符串。

您可以使用别名和 NULL 作为字符串,例如:

->select(['id', 'first_name', 'last_name' => 'NULL'])

或允许您直接插入原始 SQL 并省略别名的表达式对象:

->select(function (\Cake\ORM\Query $query) {
    return [
        'id',
        'first_name',
        $query->newExpr('NULL'),
        // in the first query the alias would be required
        // 'last_name' => $query->newExpr('NULL'),
    ];
})

请注意,您只能在传递给 union() 的查询中省略别名,不能在第一个查询中省略它,因为 ORM 稍后在构建结果集时需要​​列名, 在第一个查询中省略别名会导致错误!