我可能没有选择最具描述性的标题,但这很难解释。我有一个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。基本上我试图猜测他们是否在没有登录的情况下浏览我的网站。
答案 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);
}