php - 在模型访问器中对 id 进行散列时如何获取两个表之间的关系?
问题描述
两个表之间的关系正常工作,但是当我使用Hashids
它时它不会,它返回 null。
我的代码:
汽车模型:
public function getCarIdAttribute($value)
{
return Hashids::encode($value);
}
汽车图像模型:
public function getCarIdAttribute($value)
{
return Hashids::encode($value);
}
预留车型:
public function getCarIdAttribute($value)
{
return Hashids::encode($value);
}
public function getReserveIdAttribute($value)
{
return Hashids::encode($value);
}
public function images()
{
return $this->hasMany(CarImage::class, 'car_id');
}
我的控制器:
$cars = Car::with('images')->get();
$cars
有价值,但里面的图像,没有!
请注意,它使用的是普通 id,但是当我对它们的 id 进行哈希处理时,它不会返回任何值!
解决方案
这是正确的。由于您id
使用Accessors对属性进行哈希处理,因此对属性的任何调用,例如
$car->car_id; // would return the hashed id
显然,由于 Eloquent 关系取决于实际的 id 值而不是散列值,因此关系会中断。这就是为什么为您的主键/外键设置访问器是个坏主意。
推荐阅读
- fortran - 使用派生类型公共过程在其他派生类型中声明数组
- bash - Bash 脚本:我目前应该在一个目录中有 500 个文件,如果缺少任何文件,我该如何停止 bash 脚本?
- haskell - Haskell 将列表一分为二:偶数和奇数
- r - 根据分类因素将 ggplot 上的点更改为颜色
- java - 从Java中的String中提取具有特定模式的数字
- java - 转换原始数组的通用方法
- php - Yii2 显示错误:Hash 无效
- python - 熊猫推拉窗
- ruby-on-rails - 从 routes.rb 访问配置数据
- amp-html - 在 AMP 页面中,组件的默认 CSS 不起作用