It looks like what you managed to brainstorm your way to two concepts:
the core idea behind Data Mappers
separation the logic for creating new entries
and the logic for retrieving data (this idea is really important in CQRS, especially in context of Event Sourcing)
But I suspect that, while data mappers should be quite easy for you to grasp, the second, CQRS-related, part might be at least a year too soon for you to explore.
As for your questions..
Unless you do something stupid, there wouldn't be much duplication in your "load object" and "save objects" .. though, you probably will extract either one or two superclasses there.
The "advice you have seen" is actually called Single Responsibility Principle and is, TBH, is one is more nebulous concepts in OOP. It's like defining, what "porn" is - know it, when you see it.
And, if you want a recommendation for better approach, I would suggest to combine the read and write part in a singe data mapper. Kinda like this:
$project = new EntityProject;
$mapper = new MapperProject($pdo);
$project->setId(43);
$mapper->load($project); //pulls data about project 43 from DB
if ($project->getDeadline() > time()) {
$project->setStatus(EntityProject::STATUS_OVERDUE);
$mapper->save($project); //pushes changed state to DB
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…