如何使用NULL-safe等于mysql运算符与idiorm&巴黎

时间:2017-02-23 15:45:12

标签: php mysql

我想用idiorm&巴黎数据库工具包(http://j4mie.github.io/idiormandparis/):

SELECT mqtt_table.* FROM `shelf_mqtt_confirmation_message` `mqtt_table` WHERE NOT( `confirm_result` <=> 'positive')

我试过这样做:

$orm->where_not_equal("confirm_result","positive");

但这相当于:

SELECT mqtt_table.* FROM `shelf_mqtt_confirmation_message` `mqtt_table` WHERE NOT( `confirm_result` = 'positive')

这排除了confirm_result为NULL的所有情况:但我也希望保留这些行。问题是在MySQL =比较运算符返回NULL,如果要比较的其中一个元素是NULL而不是返回0.(当&lt; =&gt;执行与=运算符相等的比较时,但如果两个操作数都返回1而不是NULL为NULL,如果一个操作数为NULL,则为0而不是NULL)

所以我的问题是,运营商&lt; =&gt;存在于idiorm&amp;巴黎?是否有一些解决方案来执行我想做的请求,而不是使用残酷的方法作为raw_query或where_raw?

1 个答案:

答案 0 :(得分:1)

可以使用where_raw()docs link方法完成此操作。

可以重写以下SQL查询

SELECT *
  FROM shelf_mqtt_confirmation_message
 WHERE NOT(confirm_result <=> 'positive')

使用以下代码中的Idiorm

$messages = ORM::for_table('shelf_mqtt_confirmation_message')
    ->where_raw('NOT(confirm_result <=> ?)', array('positive'))
    ->find_many();
Parisdocs link中的

可能类似于

$messages = ShelfMqttConfMessage::where_raw(
        'NOT(confirm_result <=> ?)', array('positive')
    )
    ->find_many();

或者如果您正在使用模型工厂

$messages = Model::factory('ShelfMqttConfMessage')
    ->where_raw('NOT(confirm_result <=> ?)', array('positive'))
    ->find_many();