2017-12-12 14 views
1

私のデータがJSON形式の外部サーバーから来るアプリケーションを開発しています。外部ソースからテーブルレスのデータがあります。

データベーステーブルを使用せずに、各モデル間の関係を設定したいと思います。

可能でしょうか?そのような

何か:

namespace App\Services; 

class FlightService 
{ 
    /** 
    * @var FlightFactory 
    */ 
    private $flightFactory; 

    public function __construct(FlightFactory $flightFactory) 
    { 
     $this->flightFactory = $flightFactory; 
    } 

    public function getAllFlights() 
    { 
     $flightsJson = $this->getFromExternalCurl(); 
     return $this->flightFactory->buildFlightList($flightsJson); 
    } 

    private function getFromExternalCurl() 
    { 
     return Curl::to('http://www.foo.com/flights.json') 
     ->withData(array('foz' => 'baz')) 
     ->asJson() 
     ->get(); 
    } 

} 

は基本的にサービスが外部のAPI呼び出しと応答になるだろう:あなたが要求して戻ってクラスのインスタンスを処理するサービスクラスを作ることができ

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Flight extends Model 
{ 
    /** 
    * The table associated with the model. 
    * 
    * @var string 
    */ 
    protected $table = 'https://.../server/flights.json'; 
} 
+1

可能なアプローチを表し? –

+0

このコードサンプルで私はあなたが間違った方法で方法だと思う!サービスが –

+0

に設定されていれば、より詳しい情報を得る良い情報源へのリンクを提供できますか?それはあなたが話しているサービスコンテナですか? https://laravel.com/docs/5.4/container – aspirinemaga

答えて

1

インスタンスを作成するファクトリに渡されます。 laravelは、工場はそれが便利な方法が含まれているためverry便利ですCollectionを返します、またはあなたが返すことができhttps://laravel.com/docs/5.4/container

namespace App\Factories; 

class FlightFactory 
{ 
    public function buildFlightList($flightJsonList) 
    { 
     $flightCollection = collect(); 
     foreach($flightJsonList as $flightJson) { 
      $flightCollection->push($this->buildFlight($flightJson)); 
     } 
     return $flightCollection; 
    } 

    public function buildFlight($flightJson) 
    { 
     $flight = new Flight(); 
     // add properties 
     return $flight; 
    } 

} 

を使用していますので、あなただけの構造に工場を追加する必要があり、それがバインドされます

注意配列。

この例では、カールライブラリhttps://github.com/ixudra/curlを使用しましたが、これはネイティブのPHPや他のライブラリに置き換えることができます。

コントローラにFlightServiceを注入して使用することができます。

P.S:コードテストされていませんが、APIからデータを取得し、「サービス」クラスを作成し、モデルをインスタンス化する「工場」を使用しないのはなぜ

+0

ありがとうございますka_lin!私はあなたの提案を実装しようとしています。私はその後、私のフィードバックを与えます。 – aspirinemaga

+0

おそらく私は何かが不足していますが、どのように接続すればよいですか?belongsTo、hasManyなどのModelのメソッドは受け入れられますか? – aspirinemaga

+0

これらはORM固有のもので、DBを使用したくないと言っていますが、APIストアからデータを取得して処理して表示したいのですか? –

関連する問題