Laravel Eloquent:在函数中传递find()的值

时间:2014-09-07 21:49:13

标签: php mysql laravel

我可能没有选择最具描述性的标题,但这很难解释。我有一个IP表,其主键是无符号整数,即IP地址。在存储ip之前,我通过php的inet_ *函数传递ip。在我的模型IP中查找主键时,必须将find()方法中传递的ip编码为其数值。

这是一个查找示例:IP::find('10.0.2.2')应该返回一个集合。但是,它以字符串形式发送到查询,而不是整数。我想在后台发生的是:

IP::find(inet_pton('10.0.2.2'))

我不需要每次都手动插入功能。我知道,你必须认为我是如此懒惰,但我只是想找到最简单的做事方式,因为那是什么编程,对吧?

这是我的IP模型:

class IP extends Eloquent {

    protected $table = 'ips';
    protected $connection = 'game';
    protected $primaryKey = 'ip';

    public $timestamps = false;
    public $incrementing = false;

    public function getIpAttribute($value) {

        return inet_ntop($value);

    }

    public function setIpAttribute($value) {

        $this->attributes['ip'] = inet_pton($value);

    }

    public function getUuidAttribute($value) {

        return bin2hex($value);

    }

    public function setUuidAttribute($value) {

        $this->attributes['UUID'] = hex2bin($value); 

    }

}

如果您需要,请点击此处的说明:

+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| UUID  | binary(16)       | NO   |     | NULL    |       |
| ip    | int(10) unsigned | NO   | PRI | NULL    |       |
+-------+------------------+------+-----+---------+-------+

我将查找ips以返回用户的UUID。基本上我试图猜测他们是否在没有登录的情况下浏览我的网站。

2 个答案:

答案 0 :(得分:1)

您可以覆盖查找方法:

class IP extends Eloquent {

    ...

    public find($key, $columns = array('*'))
    {
        if (filter_var($key, FILTER_VALIDATE_IP))
        {   
            $key = inet_pton($key);
        }

        return parent::find($key, $columns);
    } 

}

答案 1 :(得分:0)

您可以覆盖find()方法:

class IP extends Eloquent {

    public static function find($id, $columns = array('*')) {
        return parent::find(inet_pton($id), $columns);
    }