How can the Data-Mapper Pattern be effectively used in PHP for database access with multiple interconnected tables?

When dealing with database access in PHP with multiple interconnected tables, the Data-Mapper Pattern can be effectively used to separate the database logic from the business logic. This pattern involves creating mapper classes for each database table, which handle the interactions with the database and map the data to objects in the application. By using the Data-Mapper Pattern, you can ensure that your code is more maintainable, scalable, and easier to test.

```php
// Example of implementing the Data-Mapper Pattern in PHP for database access with multiple interconnected tables

// Define a mapper class for a specific table
class UserMapper {
    protected $db;

    public function __construct($db) {
        $this->db = $db;
    }

    // Method to retrieve a user by ID
    public function getUserById($id) {
        $query = "SELECT * FROM users WHERE id = :id";
        $stmt = $this->db->prepare($query);
        $stmt->bindParam(':id', $id);
        $stmt->execute();
        $userData = $stmt->fetch();

        // Map the retrieved data to a User object
        $user = new User();
        $user->setId($userData['id']);
        $user->setName($userData['name']);
        // Additional mapping for other properties

        return $user;
    }

    // Method to save a user to the database
    public function saveUser(User $user) {
        $query = "INSERT INTO users (name) VALUES (:name)";
        $stmt = $this->db->prepare($query);
        $stmt->bindParam(':name', $user->getName());
        $stmt->execute();
    }
}

// Define a User class to represent a user entity
class User {
    protected $id;
    protected $name;

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
    }
}

// Example of using the UserMapper class
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$userMapper = new UserMapper($db);

// Retrieve a user by ID
$user = $userMapper->getUserById(1);
echo $user->getName();

// Create a new