Laravel - 第三方API的模型?

时间:2015-08-08 14:32:15

标签: laravel orm eloquent many-to-many

我正在使用一个使用Laravel后端进行API的iphone应用程序。在某些时候,将会Goole Places集成(或类似的服务)。

在我的应用程序中,我需要存储用户和位置之间的关系,这是多对多关系。但是因为' Places'不是由Eloquent模型代表(但是由谷歌的API),我如何创建这种关系?我是否需要为Google Places API创建包装器?

3 个答案:

答案 0 :(得分:1)

我会这样做。

所有模型都从基础Eloquent ORM model class扩展,这意味着可以覆盖扩展类中的finders / getters / setter等。

您的Google Place模式是一个特殊情况,它不依赖于数据库,而是依赖于Google Places API。

因此,您需要覆盖Google地方信息模型的基本Eloquent模型方法。

例如:

class GooglePlace extends Eloquent{
    /**
     * Find a model by its primary key or return new static.
     *
     * @param  mixed  $id
     * @param  array  $columns
     * @return \Illuminate\Support\Collection|static
     */
    public static function findOrNew($id, $columns = ['*'])
    {
       # we do not need Eloquent's database based implementation
       # api code to get Google Place using $id 
       # perhaps use $columns to get only specific fields about the place
       # from the API?
    }
}

然后,您只需使用Google商家信息ID将用户与数据透视表中的地点相关联。

答案 1 :(得分:0)

我认为为第三方制作模型并不重要,因为它不是雄辩的服务和使用API​​的角色。 否则我建议你提供服务:

  • 创建文件夹app / Service
  • 使用好名称空间
  • 创建一个类
  • 创建自己的功能。您可以创建配置文件并将其与Env变量一起使用来存储凭据
  • 最后在您的控制器中调用您的服务,然后在函数的输入中声明它,laravel将自动解决它。

public function test(MyService $service)

答案 2 :(得分:0)

在API和Eloquent Model透明性之间提供提供商复杂的实现。建议您使用https://github.com/CristalTeam/php-api-wrapper

Range Filter,您可以为API创建模型,并且拥有专门适应API请求的查询构建器。您可以使用高级Laravel功能(例如路由绑定)以及Eloquent模型与该程序包模型之间的关系。