1

我有一个使用标准 MySQL 数据库和用户表的用户模型和一个电影模型,它是来自 Rotten Tomatoes 的数据源。他们有一个 hasAndBelongsToMany 关系,我可以成功地写入包含 user_id 和 movie_id 的连接表 users_movies(movie_id 是烂番茄 id)。效果很好。

问题在于检索用户的电影。标准发现:

$movies = $this->User->find('all', array('conditions' => array('id' => $user_id)));

只返回用户而不是相关的电影。我在 DataSource 的 read 方法中放置了一个 die 语句,它甚至没有到达 read 方法。如何检索用户的电影?

4

2 回答 2

0

所以烂番茄拿着你的电影?在这种情况下,烂番茄当然不允许直接通过 SQL 访问他们的数据库——您将通过 API 访问它。因此,Cake 肯定不会像通常在同一个数据库中使用两个表那样将用户连接到电影。

您需要做的是 1) 从 Cake 获取用户的 movie_id 列表,然后 2) 调用 Rotten Tomatoes API 以获取其 ID 在您的 movie_id 列表中的电影列表。(假设烂番茄允许这样的 API 调用。)

快速查看 API,看起来他们的“电影搜索”(http://developer.rottentomatoes.com/docs/json/v10/Movies_Search)只允许您指定纯文本作为搜索条件(即,您无法根据电影 ID 进行搜索)。他们的“电影信息”方法(http://developer.rottentomatoes.com/docs/json/v10/Movie_Info)允许您通过 id 检索电影,但一次只允许您检索一部电影。

您当然可以循环浏览给定用户的电影 ID 列表,并为每个用户单独调用烂番茄 - 尽管我想这会变得非常慢。

有人根据多个 id 的列表(http://developer.rottentomatoes.com/forum/read/123940)提出了检索功能请求,但在该请求得到实施之前,您可能很难获得任何东西体面的工作。

于 2012-11-10T23:45:29.527 回答
0

我通过在用户和电影之间的连接表中创建一个模型并以这种方式获取用户的电影来使其工作。然后我按照您的建议进行操作,并遍历用户的电影 ID,调用 API 并获取每部电影。不确定它有多优雅,但它正在工作。

于 2012-11-11T19:08:38.127 回答