带有OR运算符Model_Crud的Where子句,FuelPHP

时间:2013-09-18 09:34:00

标签: mysql model where crud fuelphp

我正在使用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。

4 个答案:

答案 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)

WanWizard说,这不是关于ORM的。

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