2014-09-07 3 views
0

Я, вероятно, не выбрал наиболее описательное название, но это так сложно объяснить. У меня есть таблица IPs с первичным ключом целого числа без знака, ip-адреса. Прежде чем хранить ip, я передаю ip через php inet_ * функции. При выполнении первичного ключа, ищущего в моей модели IP, ip, переданный в методе find(), должен быть закодирован до его числового значения.Laravel Eloquent: Передача значения find() в функции

Ниже приведен пример поиска: 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

Вы можете просто переопределить find() метод:.

class IP extends Eloquent { 

    public static function find($id, $columns = array('*')) { 
     return parent::find(inet_pton($id), $columns); 
    } 
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); 
    } 

} 
Смежные вопросы