Model/Record can't neither be upated nor created

Hi guys,

following method runs well in another yii project, but not in my actual one. As it seems, condition


if ($model->loadAll(Yii::$app->request->post()) && $model->saveAll()) {

will be false, so, whenever I push Updatebutton, formular will be rendered again. How can this be? What is wrong with my code, which is simple enough??




    public function actionUpdate($id) {

        if (Yii::$app->request->post('_asnew') == '1') {

           $model = new Bewerber();

        } else {

            $model = $this->findModel($id);

        }

        if ($model->loadAll(Yii::$app->request->post()) && $model->saveAll()) { //this seems to be false

            return $this->goHome(); //so this will never be rendered

        } else {

            return $this->render('update', [

                        'model' => $model

            ]);

        }

    }



P.S.:The same issue can be considerd with methods create and saveasnew. Looking table with phpmyadmin shows up,that record has not been updated

  1. First of all you need to acquire debugger. This is the best your friend. And next time you’ll able to not spent time to posting on forum and wait answer.

  2. Check model errors. For example:




VarDumper::dump($model->errors);



No output with ur order. Neither in controller nor in view. If I code like this


var_dump($model);

I will get following output




[]object(frontend\modules\bewerber\models\Bewerber)#236 (9) { ["avatar"]=> NULL ["_attributes":"yii\db\BaseActiveRecord":private]=> array(51) { ["id"]=> int(211) ["id_person"]=> int(1) ["id_person_rekrutiert_von"]=> int(5) ["id_abrechnungsweg"]=> int(3) ["id_kanal"]=> int(1) ["id_bewerberquelle"]=> int(1) ["id_ba_xml_gelernter_beruf_1"]=> int(1) ["id_ba_xml_gelernter_beruf_2"]=> int(1) ["id_ba_xml_gelernter_beruf_3"]=> int(0) ["umkreis"]=> int(100) ["arbeitsuchend_seit"]=> string(10) "2017-10-11" ["avgs"]=> int(0) ["avgs_betrag"]=> int(2000) ["ablaufdatum_avgs"]=> string(10) "2017-10-27" ["wunschgehalt_brutto"]=> int(1500) ["beurteilung_fachlich"]=> string(9) "kompetent" ["beurteilung_persoenlich"]=> string(4) "stur" ["sonstiges"]=> NULL ["verfuegbar_ab"]=> string(10) "2017-10-25" ["gesuchte_positionen"]=> string(6) "Polier" ["anschreiben"]=> string(47) "Herr Egon schulz lilenalee 13 72250 Tübingen" ["arbeitsumfang_vollzeit"]=> int(1) ["arbeitsumfang_teilzeit"]=> int(1) ["arbeitszeit_bueroueblich"]=> int(1) ["arbeitszeit_vormittag"]=> int(0) ["arbeitszeit_nachmittag"]=> int(0) ["arbeitszeit_abend"]=> int(0) ["arbeitszeit_nacht"]=> int(0) ["arbeitszeit_wochenende"]=> int(1) ["schichtbereitschaft"]=> int(1) ["wochenstunden_minimum"]=> int(10) ["wochenstunden_maximum"]=> int(30) ["bemerkung_intern"]=> NULL ["quereinsteiger"]=> int(1) ["zeitarbeit"]=> int(1) ["pkw"]=> int(1) ["fuehrerschein_pkw"]=> int(1) ["fuehrerschein_lkw"]=> int(1) ["fuehrerschein_omnibus"]=> int(1) ["reisebereitschaft"]=> int(1) ["kandidat"]=> int(0) ["kandidat_seit"]=> string(10) "2017-10-04" ["veroeffentlichen_bewerberboerse"]=> int(0) ["kontakt_halten"]=> int(1) ["aktiv"]=> int(1) ["zuletzt_deaktiviert_am"]=> string(19) "2017-10-26 12:23:37" ["angelegt_am"]=> string(19) "2017-10-11 14:27:39" ["angelegt_von"]=> int(5) ["aktualisiert_am"]=> string(19) "2017-10-29 16:23:36" ["aktualisiert_von"]=> int(5) ["optimistic_lock"]=> NULL } ["_oldAttributes":"yii\db\BaseActiveRecord":private]=> array(51) { ["id"]=> int(211) ["id_person"]=> int(1) ["id_person_rekrutiert_von"]=> int(5) ["id_abrechnungsweg"]=> int(3) ["id_kanal"]=> int(1) ["id_bewerberquelle"]=> int(1) ["id_ba_xml_gelernter_beruf_1"]=> int(1) ["id_ba_xml_gelernter_beruf_2"]=> int(1) ["id_ba_xml_gelernter_beruf_3"]=> int(0) ["umkreis"]=> int(100) ["arbeitsuchend_seit"]=> string(10) "2017-10-11" ["avgs"]=> int(0) ["avgs_betrag"]=> int(2000) ["ablaufdatum_avgs"]=> string(10) "2017-10-27" ["wunschgehalt_brutto"]=> int(1500) ["beurteilung_fachlich"]=> string(9) "kompetent" ["beurteilung_persoenlich"]=> string(4) "stur" ["sonstiges"]=> NULL ["verfuegbar_ab"]=> string(10) "2017-10-25" ["gesuchte_positionen"]=> string(6) "Polier" ["anschreiben"]=> string(47) "Herr Egon schulz lilenalee 13 72250 Tübingen" ["arbeitsumfang_vollzeit"]=> int(1) ["arbeitsumfang_teilzeit"]=> int(1) ["arbeitszeit_bueroueblich"]=> int(1) ["arbeitszeit_vormittag"]=> int(0) ["arbeitszeit_nachmittag"]=> int(0) ["arbeitszeit_abend"]=> int(0) ["arbeitszeit_nacht"]=> int(0) ["arbeitszeit_wochenende"]=> int(1) ["schichtbereitschaft"]=> int(1) ["wochenstunden_minimum"]=> int(10) ["wochenstunden_maximum"]=> int(30) ["bemerkung_intern"]=> NULL ["quereinsteiger"]=> int(1) ["zeitarbeit"]=> int(1) ["pkw"]=> int(1) ["fuehrerschein_pkw"]=> int(1) ["fuehrerschein_lkw"]=> int(1) ["fuehrerschein_omnibus"]=> int(1) ["reisebereitschaft"]=> int(1) ["kandidat"]=> int(0) ["kandidat_seit"]=> string(10) "2017-10-04" ["veroeffentlichen_bewerberboerse"]=> int(0) ["kontakt_halten"]=> int(1) ["aktiv"]=> int(1) ["zuletzt_deaktiviert_am"]=> string(19) "2017-10-26 12:23:37" ["angelegt_am"]=> string(19) "2017-10-11 14:27:39" ["angelegt_von"]=> int(5) ["aktualisiert_am"]=> string(19) "2017-10-29 16:23:36" ["aktualisiert_von"]=> int(5) ["optimistic_lock"]=> NULL } ["_related":"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(2) { [0]=> array(2) { [0]=> array(2) { [0]=> object(yii\behaviors\TimestampBehavior)#238 (6) { ["createdAtAttribute"]=> string(11) "angelegt_am" ["updatedAtAttribute"]=> string(15) "aktualisiert_am" ["value"]=> object(yii\db\Expression)#237 (2) { ["expression"]=> string(5) "NOW()" ["params"]=> array(0) { } } ["attributes"]=> array(2) { ["beforeInsert"]=> array(2) { [0]=> string(11) "angelegt_am" [1]=> string(15) "aktualisiert_am" } ["beforeUpdate"]=> string(15) "aktualisiert_am" } ["skipUpdateOnClean"]=> bool(true) ["owner"]=> *RECURSION* } [1]=> string(18) "evaluateAttributes" } [1]=> NULL } [1]=> array(2) { [0]=> array(2) { [0]=> object(mootensai\behaviors\UUIDBehavior)#239 (2) { ["column"]=> string(2) "id" ["owner"]=> *RECURSION* } [1]=> string(10) "beforeSave" } [1]=> NULL } } ["beforeUpdate"]=> array(1) { [0]=> array(2) { [0]=> array(2) { [0]=> object(yii\behaviors\TimestampBehavior)#238 (6) { ["createdAtAttribute"]=> string(11) "angelegt_am" ["updatedAtAttribute"]=> string(15) "aktualisiert_am" ["value"]=> object(yii\db\Expression)#237 (2) { ["expression"]=> string(5) "NOW()" ["params"]=> array(0) { } } ["attributes"]=> array(2) { ["beforeInsert"]=> array(2) { [0]=> string(11) "angelegt_am" [1]=> string(15) "aktualisiert_am" } ["beforeUpdate"]=> string(15) "aktualisiert_am" } ["skipUpdateOnClean"]=> bool(true) ["owner"]=> *RECURSION* } [1]=> string(18) "evaluateAttributes" } [1]=> NULL } } } ["_behaviors":"yii\base\Component":private]=> array(2) { ["timestamp"]=> object(yii\behaviors\TimestampBehavior)#238 (6) { ["createdAtAttribute"]=> string(11) "angelegt_am" ["updatedAtAttribute"]=> string(15) "aktualisiert_am" ["value"]=> object(yii\db\Expression)#237 (2) { ["expression"]=> string(5) "NOW()" ["params"]=> array(0) { } } ["attributes"]=> array(2) { ["beforeInsert"]=> array(2) { [0]=> string(11) "angelegt_am" [1]=> string(15) "aktualisiert_am" } ["beforeUpdate"]=> string(15) "aktualisiert_am" } ["skipUpdateOnClean"]=> bool(true) ["owner"]=> *RECURSION* } ["uuid"]=> object(mootensai\behaviors\UUIDBehavior)#239 (2) { ["column"]=> string(2) "id" ["owner"]=> *RECURSION* } } } 



Model is all right.No abnormalities

this is output of debugger:




Routing

Name 	Value

Route 	'bewerber/bewerber/update'

Action 	'frontend\\modules\\bewerber\\controllers\\BewerberController::actionUpdate()'

Parameters 	[

    0 => '211'

]



Why you use


($model->loadAll(Yii::$app->request->post()) && $model->saveAll()

instead of


($model->load(Yii::$app->request->post()) && $model->save()

?

This methods exists?

Can you show definition of this methods?

'cause I use an extension of mootensai(more about this here)

It doesn’t matter if I use saveAll or save, both will be false. I absolutely don’t understand,why :blink:

Even, if I code like this:


if ($model->loadAll(Yii::$app->request->post())) {

condition won’t be entered! As I already noticed:Same code in another model works pretty well, but not in this one. Here is model:




<?php


namespace frontend\modules\bewerber\models\base;


use Yii;

use yii\behaviors\TimestampBehavior;

use yii\behaviors\BlameableBehavior;

use mootensai\behaviors\UUIDBehavior;


class Bewerber extends \yii\db\ActiveRecord {


    use \mootensai\relation\RelationTrait;


    public $avatar;


    public function relationNames() {

        return [

            'person',

            'abrechnungsweg',

            'bewerberquelle',

            'kanal',

            'personRekrutiertVon',

            'angelegtVon',

            'aktualisiertVon',

            'bewerbungVorschlags',

            'eMatchingbegriffs',

            'ePhases',

            'eStatuses',

            'user0',

            'user1'

        ];

    }


    public function rules() {

        return [

            [['id_person', 'id_person_rekrutiert_von', 'id_abrechnungsweg', 'id_kanal', 'id_bewerberquelle', 'id_ba_xml_gelernter_beruf_1', 'id_ba_xml_gelernter_beruf_2', 'id_ba_xml_gelernter_beruf_3', 'umkreis', 'avgs', 'avgs_betrag', 'wunschgehalt_brutto', 'arbeitsumfang_vollzeit', 'arbeitsumfang_teilzeit', 'arbeitszeit_bueroueblich', 'arbeitszeit_vormittag', 'arbeitszeit_nachmittag', 'arbeitszeit_abend', 'arbeitszeit_nacht', 'arbeitszeit_wochenende', 'schichtbereitschaft', 'wochenstunden_minimum', 'wochenstunden_maximum', 'quereinsteiger', 'zeitarbeit', 'pkw', 'fuehrerschein_pkw', 'fuehrerschein_lkw', 'fuehrerschein_omnibus', 'reisebereitschaft', 'kandidat', 'veroeffentlichen_bewerberboerse', 'kontakt_halten', 'aktiv', 'angelegt_von', 'aktualisiert_von', 'optimistic_lock'], 'integer'],

            [['ablaufdatum_avgs', 'verfuegbar_ab', 'kandidat_seit', 'zuletzt_deaktiviert_am', 'angelegt_am', 'arbeitsuchend_seit'], 'safe'],

            [['beurteilung_fachlich', 'beurteilung_persoenlich', 'sonstiges', 'anschreiben'], 'string'],

            [['gesuchte_positionen', 'bemerkung_intern'], 'string', 'max' => 255],

            [['id_person', 'avgs', 'arbeitsumfang_vollzeit', 'arbeitszeit_bueroueblich', 'kandidat', 'veroeffentlichen_bewerberboerse', 'kontakt_halten', 'aktiv'], 'required'],

            ['avgs_betrag', 'default', 'value' => '2000'],

            [['optimistic_lock'], 'default', 'value' => '0'],

            [['optimistic_lock'], 'mootensai\components\OptimisticLockValidator'],

            [['avatar'], 'file', 'skipOnEmpty' => false, 'maxFiles' => 3],

        ];

    }


    public static function tableName() {

        return 'bewerber';

    }


    public function optimisticLock() {

        return 'optimistic_lock';

    }


    public function attributeLabels() {

        return [

            'id' => Yii::t('app', 'ID'),

            'id_person' => Yii::t('app', 'Bewerber'),

            'id_person_rekrutiert_von' => Yii::t('app', 'Bewerber wurde rekrutiert von'),

            'id_abrechnungsweg' => Yii::t('app', 'Abrechnungsweg'),

            'id_kanal' => Yii::t('app', 'Kanal'),

            'id_bewerberquelle' => Yii::t('app', 'Bewerberquelle'),

            'id_ba_xml_gelernter_beruf_1' => Yii::t('app', 'Gelernter Beruf'),

            'id_ba_xml_gelernter_beruf_2' => Yii::t('app', 'Alternativ Beruf'),

            'id_ba_xml_gelernter_beruf_3' => Yii::t('app', 'ungelernte Tätigkeit'),

            'umkreis' => Yii::t('app', 'Umkreis(km)'),

            'arbeitsuchend_seit' => Yii::t('app', 'Arbeitsuchend seit'),

            'avgs' => Yii::t('app', 'Avgs'),

            'avgs_betrag' => Yii::t('app', 'Avgs-Betrag'),

            'ablaufdatum_avgs' => Yii::t('app', 'Ablaufdatum(Avgs)'),

            'wunschgehalt_brutto' => Yii::t('app', 'Wunschgehalt(brutto/€)'),

            'beurteilung_fachlich' => Yii::t('app', 'Beurteilung(fachlich)'),

            'beurteilung_persoenlich' => Yii::t('app', 'Beurteilung(persönlich)'),

            'sonstiges' => Yii::t('app', 'Sonstiges'),

            'verfuegbar_ab' => Yii::t('app', 'Verfügbar ab'),

            'gesuchte_positionen' => Yii::t('app', 'Gesuchte Positionen'),

            'anschreiben' => Yii::t('app', 'Anschreiben'),

            'arbeitsumfang_vollzeit' => Yii::t('app', 'Arbeitsumfang(VZ)'),

            'arbeitsumfang_teilzeit' => Yii::t('app', 'Arbeitsumfang(TZ)'),

            'arbeitszeit_bueroueblich' => Yii::t('app', 'ArbZ/8-16pm.'),

            'arbeitszeit_vormittag' => Yii::t('app', 'ArbZ(vorm.)'),

            'arbeitszeit_nachmittag' => Yii::t('app', 'ArbZ(Nachm.)'),

            'arbeitszeit_abend' => Yii::t('app', 'ArbZ(abds.)'),

            'arbeitszeit_nacht' => Yii::t('app', 'ArbZ(nachts)'),

            'arbeitszeit_wochenende' => Yii::t('app', 'ArbZ(WE)'),

            'schichtbereitschaft' => Yii::t('app', 'schichtbereit'),

            'wochenstunden_minimum' => Yii::t('app', 'WStd.(min.)'),

            'wochenstunden_maximum' => Yii::t('app', 'WStd.(max.)'),

            'bemerkung_intern' => Yii::t('app', 'interne Bemerkung'),

            'quereinsteiger' => Yii::t('app', 'Quereinsteiger'),

            'zeitarbeit' => Yii::t('app', 'Zeitarbeit'),

            'pkw' => Yii::t('app', 'Pkw'),

            'fuehrerschein_pkw' => Yii::t('app', 'FS(Pkw'),

            'fuehrerschein_lkw' => Yii::t('app', 'FS(Lkw)'),

            'fuehrerschein_omnibus' => Yii::t('app', 'FS(Bus)'),

            'reisebereitschaft' => Yii::t('app', 'reisebereit'),

            'kandidat' => Yii::t('app', 'Kandidat'),

            'kandidat_seit' => Yii::t('app', 'Kandidat seit'),

            'veroeffentlichen_bewerberboerse' => Yii::t('app', 'Bewerberbörse'),

            'kontakt_halten' => Yii::t('app', 'Kontakt halten'),

            'aktiv' => Yii::t('app', 'Aktiv'),

            'zuletzt_deaktiviert_am' => Yii::t('app', 'Zuletzt deaktiviert am'),

            'angelegt_am' => Yii::t('app', 'Angelegt am'),

            'angelegt_von' => Yii::t('app', 'Angelegt von'),

            'aktualisiert_am' => Yii::t('app', 'Aktualisiert am'),

            'aktualisiert_von' => Yii::t('app', 'Aktualisiert von'),

            'optimistic_lock' => Yii::t('app', 'Optimistic Lock'),

        ];

    }


    public function getPerson() {

        return $this->hasOne(\common\modules\basis\models\Person::className(), ['id' => 'id_person']);

    }


    public function getAbrechnungsweg() {

        return $this->hasOne(\common\modules\lookup\models\LAbrechnungsweg::className(), ['id' => 'id_abrechnungsweg']);

    }


    public function getBewerberquelle() {

        return $this->hasOne(\common\modules\lookup\models\LBewerberquelle::className(), ['id' => 'id_bewerberquelle']);

    }


    public function getKanal() {

        return $this->hasOne(\common\modules\lookup\models\LKanal::className(), ['id' => 'id_kanal']);

    }


    public function getPersonRekrutiertVon() {

        return $this->hasOne(\common\modules\basis\models\Person::className(), ['id' => 'id_person_rekrutiert_von']);

    }


    public function getAngelegtVon() {

        return $this->hasOne(\common\modules\basis\models\Person::className(), ['id' => 'angelegt_von']);

    }


    public function getAktualisiertVon() {

        return $this->hasOne(\common\modules\basis\models\Person::className(), ['id' => 'aktualisiert_von']);

    }


    public function getBewerbungVorschlags() {

        return $this->hasMany(\frontend\modules\bewerber\models\BewerbungVorschlag::className(), ['id_bewerber' => 'id']);

    }


    public function getEMatchingbegriffs() {

        return $this->hasMany(\common\modules\erweiterung\models\EMatchingbegriff::className(), ['id_bewerber' => 'id']);

    }


    public function getEPhases() {

        return $this->hasMany(\common\modules\erweiterung\models\EPhase::className(), ['id_bewerber' => 'id']);

    }


    public function getEStatuses() {

        return $this->hasMany(\common\modules\erweiterung\models\EStatus::className(), ['id_bewerber' => 'id']);

    }


    public function getUser0() {

        return $this->hasOne(\common\models\User::className(), ['id' => 'angelegt_von']);

    }


    public function getUser1() {

        return $this->hasOne(\common\models\User::className(), ['id' => 'aktualisiert_von']);

    }


    public function behaviors() {

        return [

            'timestamp' => [

                'class' => TimestampBehavior::className(),

                'createdAtAttribute' => 'angelegt_am',

                'updatedAtAttribute' => 'aktualisiert_am',

                'value' => new \yii\db\Expression('NOW()'),

            ],

            /* das Blameable-Verhalten wurde in unsere Klasse ausgelagert */

            'uuid' => [

                'class' => UUIDBehavior::className(),

                'column' => 'id',

            ],

        ];

    }


    public static function find() {

        return new \frontend\modules\bewerber\models\BewerberQuery(get_called_class());

    }


    /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

     *                  Ab hier werden die perswitch-Methoden implementiert

     * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

     */


    /*

      20.09.2017/tklustig/Diese Methoden liefern den String Ja/Nein zurück.Sie wird momentan nirgends aufgerufen

      verbleibt dennoch in der Klasse


      Übergabeparameter:-keiner-

      Rückgabewert:Ja/Nein AS STRING

     */


    public static function ausgabe_Ja() {

        return Yii::t('app', 'Ja');

    }


    public static function ausgabe_Nein() {

        return Yii::t('app', 'Nein');

    }


    public function upload() {

        $x=0;

        if ($this->validate()) {

            foreach ($this->avatar as $uploaded_file) {

                $uploaded_file->saveAs(Yii::getAlias('@uploading') . '/' . $uploaded_file->baseName . '.' . $uploaded_file->extension);

                $x++;

            }

            if($x>0)

            return true;

        }

        return false;

    }


}


/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

     *                 hier endet die Implementierung der WSL-Methoden

     * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */






Another strange thing:

If I try to set value manually into database like this:




$model=new Bewerber();

$model->umkreis = 5000;



this value should be written into database,shouldn’t it. But it actually won’t.

var_dump($model->umkreis); shows me int(5000) , but this value won’t be set into database…

What the hell is wrong with this all??

Do you literally mean it? Or, in other words, are you really wondering why the data won’t be saved into db without calling save()?

If you aren’t and you are just complaining that save() won’t succeed as you expect, you just have to debug why save() fails. As @umneeq has properly suggested, you should learn to use some debugger in your development.

@umneeq and all

"loadAll()" and "saveAll()" are defined in "\mootensai\relation\RelationTrait" that enables loading and saving of the model with its relations.

@tklustig

You have already narrowed down the problem where you found that “loadAll()” doesn’t work as you expect. “loadAll()” might have worked for another model and form, but it is no surprise that it may fail for the current model and form. Just debug why “loadAll()” fails.

I got it. That’s the code which will do its job in all methods:




    public function actionUpdate($id) {

        try {

            $model = new Bewerber();

            $behavior = new \common\wsl_components\Wsl_Blameable_Behavior();

            $aktualisiert_von = $behavior->get_User_Person_Id();

            if (Yii::$app->request->post('_asnew') != '1') {

                $model = $this->findModel($id);

            }

            $model->aktualisiert_von = $aktualisiert_von;

            if ($model->load(Yii::$app->request->post()) && $model->saveAll()) {

                $model->avatar = UploadedFile::getInstances($model, 'avatar');

                if ($model->upload()) {

                    return $this->redirect(['view', 'id' => $model->id]);

                }

                return $this->redirect(['view', 'id' => $model->id]);

            } else {

                return $this->render('update', [

                            'model' => $model,

                ]);

            }

        } catch (\Exception $error) { //fange den schweren MySQL-Fehler ab

            $go_back = "bewerber";

            $avoid_error = new \common\wsl_components\error_handling();

            $avoid_error->error($error, $go_back);

        }

    }



I have the same issue.

I use enhanced-gii extension from many months.

Many weeks ago i create a model and crud of a table in my project and it works.

After recent update (composer update) loadAll fails when i create/edit a record of the same table

If i use "load" instead of "loadAll" it works, but i have above 30 tables created…

What do you suggest? thank’s

EDIT: i see that probably there’s a bug: https://github.com/mootensai/yii2-relation-trait/issues/47

As it seems,there is obviously a bug.

It works only with load,not with loadAll. Very strange…