Você está em um cenário de relacionamento de muitos-para-muitos entre produtos e cores, e também faz sentido ter um relacionamento de um-para-muitos entre cores e imagens, já que cada cor pode ter muitas imagens. Para lidar com isso no Laravel com o Postgres, você precisa de 3 tabelas: uma para produtos, outra para cores e uma tabela pivot chamada "produto_cor" que liga os produtos às suas cores. Adicione uma coluna "cor_id" na sua tabela de imagens para lidar com o relacionamento da cor com as imagens.
Aqui está um exemplo de como fazer isso:
// Produto.php (Model)
public function cores()
{
return $this->belongsToMany(Cor::class, 'produto_cor');
}
// Cor.php (Model)
public function produtos()
{
return $this->belongsToMany(Produto::class, 'produto_cor');
}
public function imagens()
{
return $this->hasMany(Imagem::class);
}
// Imagem.php (Model)
public function cor()
{
return $this->belongsTo(Cor::class);
}
Com estas relações, você poderá acessar as imagens relacionadas a uma cor de um produto. O exemplo abaixo irá retornar um array com todas as imagens da primeira cor do produto.
$imagens = $produto->cores->first()->imagens;
Se precisar de ajuda adicional em como configurar essas relações, acredito que a documentação https://laravel.com/docs/master/eloquent-relationships) possa ajudar.