@romkaby

Yii2 / Active Record / Как получить поля из Join таблицы?

Собственно, код:
$data = Media::find()
            ->select( ['media.*', 'content.*'] )
            ->leftJoin('content','`content`.`id` = `media`.`parent_id`')
            ->orderBy(['`media`.`id`' => SORT_DESC])->all();

Сама модель Media наследована от ActiveRecord
В результате каждый элемент состоит из полей таблицы media, а данных таблицы content, которая джойнится - нету.
Посдкажите как из выковырять эти поля?
  • Вопрос задан
  • 964 просмотра
Решения вопроса 1
vikoff
@vikoff
Web-разработчик
Я для этого использовал кастомный behaviour. Решение не самое красивое, но лучше ничего не придумалось. Этот behaviour позволяет модели иметь совершенно произвольные свойства.

класс кастомного Behaviour
namespace app\custom\behaviors;

use yii\base\Behavior;

class ExtraPropsBehaviour extends Behavior
{
	protected $_props = [];

	public function canGetProperty($name, $checkVars = true)
	{
		return TRUE;
	}

	public function canSetProperty($name, $checkVars = true)
	{
		return TRUE;
	}

	public function __get($name)
	{
		return isset($this->_props[$name]) ? $this->_props[$name] : null;
	}

	public function __set($name, $value)
	{
		$this->_props[$name] = $value;
	}

	public function __isset($name)
	{
		return isset($this->_props);
	}

}


а это добавить в модель
/** @inheritdoc */
	public function behaviors()
	{
		return [
			ExtraPropsBehaviour::className()
		];
	}


После применения можно обращаться к результатам сджойненной таблицы как к простым свойствам модели:
$model->field_from_joined_table
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы