我想用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?
答案 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();