Laravel雄辩的来自外部来源的无表格数据

时间:2017-12-12 11:59:06

标签: php laravel web-services eloquent relationship

我正在开发一个应用程序,其中我的数据来自JSON格式的外部服务器。

我想在每个模型之间设置关系,但不使用数据库表。

有可能吗?

类似的东西:

var country_x = (country1.length > 4)?0:140;

top_text.append("text")
.attr("x",country_x)
.attr("y",120)
.attr("font-size","50")
.attr("fill","white")
.style("text-anchor","middle")
.attr("font-family","Franklin Gothic Demi Cond")
.text(country1);  // This I need to change the style

top_text.append("text")
.attr("x",215)
.attr("y",120)
.attr("font-size","38")
.attr("fill","white")
.attr("font-family","Calibri")
.text("will grow"); 

1 个答案:

答案 0 :(得分:1)

您可以创建一个处理请求的服务类并返回类实例:

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调用,并将响应传递给创建实例的工厂。

请注意,您只需要在构造中添加工厂并将其绑定,因为laravel使用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;
    }

}

工厂将返回一个非常有用的Collection,因为它包含有用的方法,或者你可以返回一个数组。

在这个例子中,我使用了curl库https://github.com/ixudra/curl,但它可以用原生php或其他库替换。

然后您可以通过在控制器中注入FlightService来使用。

P.S:代码未经测试但代表了一种可能的方法