Как я могу получить простой объект php из стороннего пакета, который унаследует все достоинства моделей Laravels Eloquent? увидеть ниже:
Класс модели ниже от сторонний пакет. это рамки и ORM агностик, написано в простой PHP. Я не могу изменить это, только расширить это. (только пример)
class APlainPHPModelFromLibrary {
protected $someAttribute;
protected $someOtherAttribute;
//...
public function someFunction()
{
// ...
}
}
А вот и моя версия Laravel Eloquent этого модельного класса. Мне необходимо расширить Eloquent из этого класса. Также мне нужно расширить вышеприведенную модель VanillaPHP, чтобы она могла наследовать методы Eloquent. Я не могу найти способ обойти это.
class MyEloquentModelVersion extends Eloquent ... extends APlainPHPModelFromLibrary { // ??
$guarded = [
'EloquentGoodness',
'EloquentGoodness'
];
public function belongsTo()
{
//...Eloquent goodness
}
public function hasMany()
{
//,..Eloquent Goodness
}
}
Это всего лишь предложение. Вы, вероятно, сможете решить ее несколькими другими способами.
ThirdPartyServiceProvider.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());
});
}
}
ThirdPartyService.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;
Других решений пока нет …