干净的方式获得外键对象在PHP MySQL查询


Clean way to get foreign key objects in PHP MySQL query

我使用下面的代码从MySQL数据库中获取一个book对象。

$q = $pdo->prepare('SELECT 
                        book_id "id", 
                        book_title "title", 
                        book_slug "slug"
                    FROM book 
                    WHERE book_id=:id');
$q->bindParam(':id', $id, PDO::PARAM_INT);
$q->execute();
$book = $q->fetchObject('Book');

书籍与歌曲有多对多关系,歌曲有song_idsong_titlesong_lyrics,因此我有一个包含book_idsong_id的book_song表。

我想得到属于一本书的所有歌曲。在一个查询中是否有一个干净的方法来做到这一点?

我在这里寻找的是如何以一种干净的方式编写查询,以及如何处理结果,最终得到一个具有Song对象数组的Book对象,而无需太多代码。

gillyspy建议的JOIN将是ORM如何处理这个问题,但是如果您只使用PDO,那么您必须自己处理所有映射(以及循环,并检测何时创建新对象等)。在我看来,您已经越过了考虑ORM框架(例如http://www.phpactiverecord.org/)的阈值。如果您再添加一个一对多关联,那么映射将使您的大脑受到伤害。