我正在使用win7,FuelPHP 1.6和xampp 1.8.1(PHP 5.4.7)
我创建了新的模型crud类:
class Model_Message extends \Model_Crud {
protected static $_table_name = 'message';
public static function list_message(){
$list_messages = Model_Message::find(array(
'select' => array('id', 'type', 'content', 'from_user', 'to_user', 'created_at', 'updated_at'),
'where' => array(
'from_user' => '1',
'or' => array('to_user' => '2'),
),
'limit' => 50,
));
return $list_messages;
}
这是错误
注意!
Fuel\Core\PhpErrorException [ Notice ]: Undefined offset: 0
COREPATH/classes/database/query/builder/where.php @ line 60
55 {
56 foreach ($column as $key => $val)
57 {
58 if (is_array($val))
59 {
60 $this->and_where($val[0], $val[1], $val[2]);
61 }
62 else
63 {
64 $this->and_where($key, '=', $val);
65 }
如果我删除< '或'=>数组('to_user'=>'2'),>,它有效。 但我想要过滤器1或2。
答案 0 :(得分:1)
关于此页面:http://fuelphp.com/docs/packages/orm/crud.html
如果您使用find()
功能,则无法使用or_where。
这是执行此操作的好方法:
public static function list_message(){
$list_messages = Model_Message::query()->select('id', 'type', 'content', 'from_user', 'to_user', 'created_at', 'updated_at')->where('from_user', '1')->or_where('to_user', '2')->limit(50);
return $list_messages;
}
希望它会对你有所帮助。
答案 1 :(得分:0)
从手册页here
class Model_Message extends \Model_Crud {
protected static $_table_name = 'message';
public static function list_message(){
$list_messages = Model_Message::find(array(
'select' => array('id', 'type', 'content', 'from_user', 'to_user', 'created_at', 'updated_at'),
'where' => array(
array('from_user' => '1'), // <-- note the array
'or' => array('to_user' => '2'),
),
'limit' => 50,
));
return $list_messages;
}
看起来你的语法略显错误
答案 2 :(得分:0)
你可以通过这种方式尝试..
public static function list_message(){
$list_messages = Model_Message::query()->select('id', 'type', 'content', 'from_user', 'to_user', 'created_at', 'updated_at')->where('from_user', 1)->or_where('to_user', 2)->limit(50);
return $list_messages;
}
如果您需要更多参考,请查看这部分文档。 http://fuelphp.com/docs/packages/orm/crud.html
答案 3 :(得分:0)
Model_Crud不能以通常的方式使用“或”,因为“find”静态方法在里面调用了“Model_DB :: and_where()。”我找到了一种方法:
$list_messages = Model_Message::find(array(
'select' => array('id', 'type', 'content', /*...*/ 'created_at', 'updated_at'),
'where' => function($query) {
$query->where("from_user", 1)->or_where("to_user", 2);
},
'limit' => 50,
));
不聪明......是不是有任何好的解决方案?
http://fuelphp.com/docs/classes/database/qb_where.html#/method_and_where