Пожалуйста, не могли бы вы немного помочь мне с моей проблемой?
У меня есть класс с именем Translateable, а затем описать Article и Banner, которые расширяют этот класс.
Проблема возникает, когда я делаю это:
$article = (new Article)->find(15);
$banner = (new Banner)->find(1);
$articleTrans = $article->trans(); // method trans is method from Translateable
Когда я звоню $article->trans();
Я ожидаю вывод, как это:
App\Models\ArticleTrans
Article
но это вернуть это:
App\Models\ArticleTrans
Banner
Первый ряд в порядке, но второй, если плохо, и я не знаю, как решить эту проблему.
Мне нужно иметь $ экземпляр хранится как статическое свойство.
Не могли бы вы мне помочь?
class Translateable extends Model {
static $transLang = null;
static $transClass = null;
static $instance = null;
public function __construct(array $attributes = array()) {
static::$transLang = App::getLocale();
parent::$transClass = static::$transClass;
parent::$instance = static::$instance;
parent::__construct($attributes);
}
/**
* get items trans
*
* @param null $lang
* @return mixed
*/
public function trans($lang = null) {
if($lang == null) {
$lang = static::$transLang;
}
echo static::$transClass;
echo class_basename(static::$instance);
die();
}
public static function find($primaryKeyVal, $columns = []) {
$tci = new static::$transClass;
$item = static::withTrans()->where(static::$instance->getTable() . '.' . static::$instance->primaryKey, '=', $primaryKeyVal)->where($tci->getTable() . '.lang', '=', static::$transLang)->first();
return $item;
}
}
class Article extends Translateable {
static $transClass = 'App\Models\ArticleTrans';
public function __construct(array $attributes = array()) {
parent::$transClass = static::$transClass;
parent::$instance = $this;
parent::__construct($attributes);
}
}
class Banner extends Translateable {
static $transClass = 'App\Models\BannerTrans';
public function __construct(array $attributes = array()) {
parent::$transClass = static::$transClass;
parent::$instance = $this;
parent::__construct($attributes);
}
}
Задача ещё не решена.
Других решений пока нет …