FuelPHP查询构建器连接多个字段

时间:2012-10-29 14:30:21

标签: php mysql sql fuelphp

我需要使用各种参数的连接创建一个查询,例如:

SELECT foo.*, bar.* FROM foo LEFT JOIN bar ON foo.c1 = bar.c1 AND foo.c2 = bar.c2 WHERE foo c3 = "somedata";

问题是我找不到如何使用FuelPHP查询生成器创建“AND”。

感谢。

3 个答案:

答案 0 :(得分:2)

可以在一个连接中使用多个 - > on。在这种情况下,Builder将使用“AND”组合它们。

答案 1 :(得分:0)

他们编译on条件的方式使得无法设置status = 1

之类的值

我将函数on_string添加到\ Fuel \ Core \ Database_Query_Builder_Join

public function on_string($string) { 
    $this->_on_string = $string;
    return $this;
}

在compile()

       if ($this->_on_string == "") { //yau add on string
        $conditions = array();
        foreach ($this->_on as $condition) {
            // Split the condition
            list($c1, $op, $c2) = $condition;

            if ($op) {
                // Make the operator uppercase and spaced
                $op = ' ' . strtoupper($op);
            }

            // Quote each of the identifiers used for the condition
            $conditions[] = $db->quote_identifier($c1) . $op . ' ' . $db->quote_identifier($c2);
        }

        // Concat the conditions "... AND ..."
        $sql .= '(' . implode(' AND ', $conditions) . ')';
    } else {            
        $sql .= '(' . $this->_on_string . ')'; //yau add on string
    }

也要将您的方法暴露给Database_Query_Builder_Select。

    public function on_string($string)
{
    $this->_last_join->on_string($string);

    return $this;
}

答案 2 :(得分:0)

我认为不需要Tan Shun Yau。 您可以根据字符串进行选择,但您需要像以下一样转义值:

->on('t.object_property', '=', \DB::quote($property));