<commit_before><?php

namespace maybeworks\libs;

//use yii\db\ActiveRecord;

/**
 * Class AdditionsTrait
 *
 * @property array $copyUnset
 * @package maybeworks\libs
 */
trait AdditionsTrait {

	/**
	 * Создание копии записи на основе существующей
	 * @return ActiveRecord
	 */
	public function getCopy() {
		/**
		 * @var $this ActiveRecord
		 */
		$new = static::getItem();

		$new->setAttributes($this->attributes, false);

		// удаляем поля, которых не должно быть у новой записи
		foreach (array_merge($new::primaryKey(),$this->copyUnset) as $field) {
			if (isset($new[$field])) {
				unset($new[$field]);
			}
		}

		return $new;
	}

	public function getCopyUnset(){
		return [];
	}

	/**
	 * Получить запись по id или создать новый экземпляр класса АР (если id = null)
	 * @param $id [опционально] id записи (по умолчанию null)
	 * @return ActiveRecord если указан id, но запись не найдена, вернет null
	 */
	public static function getItem($id = null) {
		if ($id) {
			$item = static::findOne($id);
			$scenario = 'update';
		} else {
			$item = new static();
			$scenario = 'insert';
		}

		// если есть сценарий insert/update, применяем его
		if ($item && array_key_exists($scenario, $item->scenarios())) {
			$item->setScenario($scenario);
		}

		return $item;
	}

	public static function findOrCreate($arguments = [], $save = false){
		/** @var $model ActiveRecord */
		if($model = self::find()->where($arguments)->one()){
			return $model;
		}


		$model = new static();
		if ($model && array_key_exists('insert', $model->scenarios())) {
			$model->setScenario('insert');
		}
		$model->setAttributes($arguments);

		if($save){
			$model->save();
		}

		return $model;
	}
}<commit_msg>fix findOrCreate<commit_after><?php

namespace maybeworks\libs;

//use yii\db\ActiveRecord;

/**
 * Class AdditionsTrait
 *
 * @property array $copyUnset
 * @package maybeworks\libs
 */
trait AdditionsTrait {

	/**
	 * Создание копии записи на основе существующей
	 * @return ActiveRecord
	 */
	public function getCopy() {
		/**
		 * @var $this ActiveRecord
		 */
		$new = static::getItem();

		$new->setAttributes($this->attributes, false);

		// удаляем поля, которых не должно быть у новой записи
		foreach (array_merge($new::primaryKey(),$this->copyUnset) as $field) {
			if (isset($new[$field])) {
				unset($new[$field]);
			}
		}

		return $new;
	}

	public function getCopyUnset(){
		return [];
	}

	/**
	 * Получить запись по id или создать новый экземпляр класса АР (если id = null)
	 * @param $id [опционально] id записи (по умолчанию null)
	 * @return ActiveRecord если указан id, но запись не найдена, вернет null
	 */
	public static function getItem($id = null) {
		if ($id) {
			$item = static::findOne($id);
			$scenario = 'update';
		} else {
			$item = new static();
			$scenario = 'insert';
		}

		// если есть сценарий insert/update, применяем его
		if ($item && array_key_exists($scenario, $item->scenarios())) {
			$item->setScenario($scenario);
		}

		return $item;
	}

	public static function findOrCreate($arguments = [], $save = false){
		/** @var $model ActiveRecord */
		if($model = self::find()->where($arguments)->one()){
			return $model;
		}
		
		$model = self::getItem();
		$model->setAttributes($arguments);

		if($save){
			$model->save();
		}

		return $model;
	}
}
{'fraction_non_alphanumeric': 0.16454545454545455, 'fraction_numerical': 0.0, 'mean_word_length': 3.5910987482614742, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 23, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4394942', 'n_tokens_mistral': 1308, 'n_tokens_neox': 1225, 'n_words': 279}