【问题标题】:Clean way to get foreign key objects in PHP MySQL query在 PHP MySQL 查询中获取外键对象的干净方法
【发布时间】:2013-05-13 14:14:04
【问题描述】:

我使用以下代码从我的 MySQL 数据库中获取书籍对象。

$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 表。

我想获取属于一本书的所有歌曲。有没有一种简洁的方法可以在一个查询中执行此操作?

我在这里寻找的是如何以简洁的方式编写查询,以及如何处理结果以最终得到一个 Book 对象,该对象包含一组 Song 对象,而无需太多代码。

【问题讨论】:

  • 嗯......你的意思是一个查询来检索属于一本书的所有歌曲......你为什么不使用连接语句?
  • 使用 PDO 使用 fetchall 创建关联数组php.net/manual/en/pdostatement.fetchall.php
  • 你肯定不是指INNER JOIN
  • 当然使用 JOIN 也是其中的一部分。我想知道的是如何编写 SQL 和 PHP 以尽可能干净地做到这一点。
  • @gillyspy 已经使用 fetchAll 来获取书籍或歌曲或其他内容的列表,但我在这里谈论的是外键,我认为 fetchAll 没有任何作用。

标签: php mysql sql pdo many-to-many


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2014-01-15
    • 2011-01-22
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多