0

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

如果我删除 < 'or' => array('to_user' => '2'), >,它会起作用。但我想要过滤器 1 或 2。

4

4 回答 4

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;
}

希望它会帮助你。

于 2013-12-13T09:47:14.630 回答
0

正如 WanWizard 所说,这与 ORM 无关。

Model_Crud 不能以通常的方式使用“或”,因为“查找”静态方法在内部调用“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

于 2013-12-11T23:29:07.603 回答
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

于 2013-09-20T17:02:13.140 回答
0

这里的手册页

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;
}

看起来你的语法有点错误

于 2013-09-18T15:04:05.017 回答