CakePHP2从DataSource获取关联模型

时间:2012-11-10 21:24:28

标签: cakephp model datasource cakephp-2.1 rotten-tomatoes

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

麻烦在于检索用户的电影。标准发现:

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

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

2 个答案:

答案 0 :(得分:0)

烂番茄正在拍电影吗?在这种情况下,当然Rotten Tomatoes不允许直接SQL访问他们的数据库 - 您将通过API访问它。因此,Cake肯定不会像通常在同一个数据库中使用两个表一样将用户加入电影。

你需要做的是1)从Cake获取用户movie_id的列表,然后2)调用烂番茄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列表,并为每一个做一个单独的API调用烂番茄 - 虽然我想这会非常慢。

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

答案 1 :(得分:0)

我通过在用户和电影之间的联接表中制作模型以及以这种方式获取用户电影来实现它。然后我按照你的建议做了,并通过用户的电影ID循环调用API并获取每部电影。不确定它有多优雅,但它有效。