Код: Выделить всё
/**
* Функция валидирует и сохраняет новости в таблице this_day, если запись уже есть - обновляет ее
* @return array
*/
public function validateEdit() {
$editNames = $this->editItems();
$itemsDeleted = $this->deleteAllInThisYearAndDay();
//Date - дата публикации новости в блоке "В этот день...".
//cdate - дата, когда была сгенерирована конкретная запись для блока "В этот день..." не путать с cdate
//$model инициализируется в цикле для вставки нескольких элементов в таблицу
foreach ($editNames as $key => $selectedNews) {
$model = new ThisDay;
$mkTime = mktime(0, 0, 0, date('m', Date::now()), date('d', Date::now()) + 1, date('Y', Date::now()));
if ($model->load(Yii::$app->request->post(), '') && !$model->validate()) {
//$selectedNews - массив с выбранными новостями
//$id - id выбранных новостей
//$newsText - заголовок выбранных новостей
foreach ($selectedNews as $id => $newsText) {
$id = intval($id);
$model = new ThisDay;
$news = News::findNews($id);
if ($itemsDeleted) {
$model->news_name = $newsText;
$model->old_name = $news->name;
$model->user_id = Yii::$app->user->id;
$model->id_news = $id;
$model->editor_id = Yii::$app->user->id;
$model->id_region = REGION_ID;
$model->cdate = $mkTime;
//если новость в таблице - значит она выбрана
$model->checked = 1;
$timeToSave = mktime(0, 0, 0, date('m', $model->news->cdate_int), date('d', $model->news->cdate_int), date('Y', $model->news->cdate_int));
$model->pubDate = $mkTime;
$model->cdate_int = $timeToSave;
$model->day = date('j', $timeToSave);
$model->month = date('n', $timeToSave);
$model->save();
} else {
//сохраняет новые данные в модель, если запись уже есть в таблице
$updateModel = $this->updatingNew($id, $newsText, Yii::$app->user->id, $model->edate);
}
}
}
}
return $model;
}
Код: Выделить всё
/**
* Функция подхватывает post запрос с формы, обходит его и возвращает массив с текстом и ID
* @return array
*/
public function editItems() {
$editNews = Yii::$app->request->post('ThisDay');
foreach ($editNews["news_name"] as $year => $name) {
$result[] = $name;
}
return $result;
}
/**
* Функция обновления уже существующей записи в таблице this_day
* @param integer $id
* @param string $newsText
* @param integer $editorId
* @param integer $timeUp
* @return array
*/
public function updatingNew($id, $newsText, $editorId, $timeUp) {
$model = ThisDay::findOne(['id_news' => $id]);
if ($model) {
$model->news_name = $newsText;
$model->editor_id = $editorId;
$model->edate = $timeUp;
$model->validate();
return $model;
} else {
return $model;
}
}
/**
* Удаляет данные за год ($yearToDelete) и день ($dayToDelete)
* @return boolean
*/
public function deleteAllInThisYearAndDay() {
$deleted = false;
$editNames = $this->editItems();
foreach ($editNames as $key => $selectedNews) {
foreach ($selectedNews as $id => $newsText) {
$thisDayNew = ThisDay::findOne(["id_news" => $id]);
$news = News::findNews($id);
$yearToDelete = date('Y', $news->cdate_int);
$dayToDelete = date('j', $news->cdate_int);
if (!$thisDayNew) {
ThisDay::deleteAll(["FROM_UNIXTIME(cdate_int, '%Y')" => $yearToDelete, "day" => $dayToDelete]);
$deleted = true;
} else
$deleted = false;
}
}
return $deleted;
}
При том что в модели там данные следующего вида (но не для всех случаев, раньше возвращалась пустота, если модели нет, а теперь fatal error):
Код: Выделить всё
object(\models\ThisDay)#337 (10) {
["_attributes":"yii\db\BaseActiveRecord":private]=>
array(14) {
["id"]=>
int(702)
["id_news"]=>
int(601457)
["news_name"]=>
string(134) "ÐО "ГЛОÐÐСС" изменило график поÑтавок "белых кнопок" в Приморье"
["old_name"]=>
string(134) "ÐО "ГЛОÐÐСС" изменило график поÑтавок "белых кнопок" в Приморье"
["cdate_int"]=>
int(1498510800)
["user_id"]=>
int(195114)
["cdate"]=>
int(1530093065)
["id_region"]=>
int(43)
["pubDate"]=>
int(1530133200)
["editor_id"]=>
int(195114)
["edate"]=>
int(1530097891)
["checked"]=>
int(1)
["day"]=>
int(27)
["month"]=>
int(6)
}
["_oldAttributes":"yii\db\BaseActiveRecord":private]=>
array(14) {
["id"]=>
int(702)
["id_news"]=>
int(601457)
["news_name"]=>
string(134) "ÐО "ГЛОÐÐСС" изменило график поÑтавок "белых кнопок" в Приморье"
["old_name"]=>
string(134) "ÐО "ГЛОÐÐСС" изменило график поÑтавок "белых кнопок" в Приморье"
["cdate_int"]=>
int(1498510800)
["user_id"]=>
int(195114)
["cdate"]=>
int(1530093065)
["id_region"]=>
int(43)
["pubDate"]=>
int(1530133200)
["editor_id"]=>
int(195114)
["edate"]=>
int(1530097891)
["checked"]=>
int(1)
["day"]=>
int(27)
["month"]=>
int(6)
}
["_related":"yii\db\BaseActiveRecord":private]=>
array(0) {
}
["_relationsDependencies":"yii\db\BaseActiveRecord":private]=>
array(0) {
}
["_errors":"yii\base\Model":private]=>
NULL
["_validators":"yii\base\Model":private]=>
NULL
["_scenario":"yii\base\Model":private]=>
string(7) "default"
["_events":"yii\base\Component":private]=>
array(2) {
["beforeInsert"]=>
array(1) {
[0]=>
array(2) {
[0]=>
array(2) {
[0]=>
object(yii\behaviors\TimestampBehavior)#338 (7) {
["createdAtAttribute"]=>
string(10) "created_at"
["updatedAtAttribute"]=>
string(10) "updated_at"
["value"]=>
NULL
["attributes"]=>
array(2) {
["beforeInsert"]=>
array(2) {
[0]=>
string(5) "cdate"
[1]=>
string(5) "edate"
}
["beforeUpdate"]=>
array(1) {
[0]=>
string(5) "edate"
}
}
["skipUpdateOnClean"]=>
bool(true)
["preserveNonEmptyValues"]=>
bool(false)
["owner"]=>
*RECURSION*
}
[1]=>
string(18) "evaluateAttributes"
}
[1]=>
NULL
}
}
["beforeUpdate"]=>
array(1) {
[0]=>
array(2) {
[0]=>
array(2) {
[0]=>
object(yii\behaviors\TimestampBehavior)#338 (7) {
["createdAtAttribute"]=>
string(10) "created_at"
["updatedAtAttribute"]=>
string(10) "updated_at"
["value"]=>
NULL
["attributes"]=>
array(2) {
["beforeInsert"]=>
array(2) {
[0]=>
string(5) "cdate"
[1]=>
string(5) "edate"
}
["beforeUpdate"]=>
array(1) {
[0]=>
string(5) "edate"
}
}
["skipUpdateOnClean"]=>
bool(true)
["preserveNonEmptyValues"]=>
bool(false)
["owner"]=>
*RECURSION*
}
[1]=>
string(18) "evaluateAttributes"
}
[1]=>
NULL
}
}
}
["_eventWildcards":"yii\base\Component":private]=>
array(0) {
}
["_behaviors":"yii\base\Component":private]=>
array(1) {
["timestamp"]=>
object(yii\behaviors\TimestampBehavior)#338 (7) {
["createdAtAttribute"]=>
string(10) "created_at"
["updatedAtAttribute"]=>
string(10) "updated_at"
["value"]=>
NULL
["attributes"]=>
array(2) {
["beforeInsert"]=>
array(2) {
[0]=>
string(5) "cdate"
[1]=>
string(5) "edate"
}
["beforeUpdate"]=>
array(1) {
[0]=>
string(5) "edate"
}
}
["skipUpdateOnClean"]=>
bool(true)
["preserveNonEmptyValues"]=>
bool(false)
["owner"]=>
*RECURSION*
}
}
}