Как получить отношения между двумя таблицами, когда идентификаторы хэшируются в модели доступа? - PullRequest
0 голосов
/ 30 декабря 2018

Соотношение между двумя таблицами работает корректно, но когда я использую Hashids, оно не работает и возвращает ноль.

Мой код:

Модель автомобиля:

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имеет значение, но изображения внутри него, а не!

Обратите внимание, что он работает с простыми идентификаторами, но когда я хэширую их идентификаторы, он не возвращает никакого значения!

1 Ответ

0 голосов
/ 30 декабря 2018

Это верно.Поскольку вы хэшируете атрибуты id с помощью Accessors , любой вызов свойства, такого как

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

Очевидно, что отношение Eloquent зависит от фактического значения идентификатора, а не отхэши один, отношения разорвутся.Вот почему плохая идея иметь аксессор для вашего первичного / внешнего ключа.

...