【发布时间】:2026-02-01 05:50:01
【问题描述】:
我有一个如下所示的课程:
<?php
namespace App;
use App\State;
use Illuminate\Database\Eloquent\Model;
class Property
{
/**
* Connection state logs connected to property
*/
public function states() {
return $this->hasMany('App\State', 'property_ip', 'ip');
}
/**
* Always force ips to be stored as numbers and shown as strings
*
* 192.168.0.2 vs 3232235522
*/
public function setIpAttribute($value) {
$this->attributes['ip'] = ip2long($value);
}
public function getIpAttribute($value) {
return long2ip($value);
}
}
在数据库中,所有 IP 都存储为整数,但它们始终显示为字符串。问题是访问器getIpAttribute() 将ip 转换为字符串,然后hasMany 关系states 在应该通过整数ip 查找时尝试通过文本ip 查找状态。如果我杀死访问者,一切正常,但随后它将 IP 显示为整数,这对最终用户无用。
有没有办法拥有这样的访问器,但仍然能够根据从数据库中出来的值进行连接?
【问题讨论】:
-
attribute casting 会不会有好处?
标签: laravel laravel-5 eloquent accessor mutators