如何在纯PHP对象上继承Eloquent的功能


How to inherit Eloquent's functionality on plain PHP objects

如何让来自第三方软件包的纯 php 对象继承 Laravels Eloquent 模型的所有优点? 见下文:


下面的模型类来自第三方包。它是框架和ORM不可知的,用普通的PHP编写。我不能改变它,只能扩展它。(仅供参考)

class APlainPHPModelFromLibrary {
    protected $someAttribute;
    protected $someOtherAttribute;
    //...
    public function someFunction()
    {
        // ...
    }
}

这是我这个模型类的Laravel Eloquent 版本。我需要从这个类扩展 Eloquent 。此外,我需要从上面的VanillaPHPModel扩展,以便它可以继承Eloquent的方法。我看不出解决这个问题的方法。

class MyEloquentModelVersion extends Eloquent ... extends APlainPHPModelFromLibrary { // ??
    $guarded = [
        'EloquentGoodness',
        'EloquentGoodness'
    ];
    public function belongsTo()
    {
        //...Eloquent goodness
    }
    public function hasMany()
    {
        //,..Eloquent Goodness
    }
}   
这只是

一个建议。您可能能够以多种其他方式解决它。

第三方服务提供商.php

<?php
    class ThirdPartyServiceProvider extends 'Illuminate'Support'ServiceProvider {
        public function register() {
            $this->app->bind('ThirdPartyService', function($app, $third_party_model) {
                return new ThirdPartyService($third_party_model, new MyEloquentModelVersion());
            });
        }
    }

第三方服务.php

<?php
    class ThirdPartyService {
       public $third_party_model         = null;
       public $my_eloquent_model_version = null;
       function __construct(APlainPHPModelFromLibrary $third_party_model, MyEloquentModelVersion $my_eloquent_model_version) {
          $this->third_party_model         = $third_party_model;
          $this->my_eloquent_model_version = $my_eloquent_model_version;
        }
        function translate() {
            // conversion code
            return $this;
        }
    }

在控制器中:

$tpsp = App::make('ThirdPartyServiceProvider', $third_party_model);
$tpsp->translate()->my_eloquent_model_version;