首页 > 解决方案 > 在模型访问器中对 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 进行哈希处理时,它不会返回任何值!

标签: phplaravelmodelrelationshiphashids

解决方案


这是正确的。由于您id使用Accessors对属性进行哈希处理,因此对属性的任何调用,例如

$car->car_id; // would return the hashed id

显然,由于 Eloquent 关系取决于实际的 id 值而不是散列值,因此关系会中断。这就是为什么为您的主键/外键设置访问器是个坏主意。


推荐阅读