Welcome Guest, Not a member yet? Register   Sign In
Some data is not updating
#1

Hi,
I'm on version 4.4.5 of Codeigniter and I have a problem with database fields being ignored with the save() function for Models. So with save(), the insert is done very well and the update too except for two fields "modifiedOn (datetime)" and 'modifiedBy (int) which do not fill up when I update the data. 
Here is my model
PHP Code:
namespace App\Models;

use 
CodeIgniter\Model;

class 
Tender_model extends Model
{
    protected $DBGroup          'default';
    protected $table            'tenders';
    protected $primaryKey      'id';
    protected $useAutoIncrement true;
    protected $insertID        0;
    protected $returnType      'array';
    protected $useSoftDeletes  true;
    protected $protectFields    true;
    protected $allowedFields    = ['id''title''typeId''serviceId''summaryMarket''isPublicMarket''estimatedDuration''estimatedAmount''executionPeriodFrom''executionPeriodTo''publicationDate''deliveryTenderDate''summaryExpectationsProviders''modalitySubmission''modifiedOn''modifiedBy''deletedOn''deletedBy''wp_id''owner''createdBy'];

    // Dates
    protected $useTimestamps false;
    protected $dateFormat    'datetime';
    protected $createdField  'createdOn';
    protected $updatedField  'modifiedOn';
    protected $deletedField  'deletedOn';

    // Validation
    protected $validationRules      = [];
    protected $validationMessages  = [];
    protected $skipValidation      false;
    protected $cleanValidationRules true;

    // Callbacks
    protected $allowCallbacks true;
    protected $beforeInsert  = [];
    protected $afterInsert    = [];
    protected $beforeUpdate  = [];
    protected $afterUpdate    = [];
    protected $beforeFind    = [];
    protected $afterFind      = [];
    protected $beforeDelete  = [];
    protected $afterDelete    = [];

Here is my controller, the useful functions
PHP Code:
public function create()
    {
        //print_r($this->request->getPost()); // check file PDF only
        if($this->request->getPost()){
            
            
if (!empty($this->request->getPost('tenderId'))) {
                $primaryKey 'id';
                $data['id'] = $this->request->getPost('tenderId');
                $data['modifiedBy'] = session('user')['peopleId'];
                $data['modifiedOn'] = date('Y-m-d H:i:s');
                if(! empty($this->request->getPost('contactPeopleId')))
                    $data['owner'] = $this->request->getPost('contactPeopleId');
            } else {
                $data['createdBy'] = session('user')['peopleId'];
                //$data['owner'] = (empty($this->request->getPost('contactPeopleId'))) ? $data['createdBy'] : $this->request->getPost('contactPeopleId');
            }
            $data['title'] = $this->request->getPost('title');
            $data['summaryMarket'] = $this->request->getPost('summaryMarket');
            $data['isPublicMarket'] = $this->request->getPost('isPublicMarket');
            $data['executionPeriodFrom'] = $this->request->getPost('executionPeriodFrom');
            $data['executionPeriodTo'] = $this->request->getPost('executionPeriodTo');
            $data['publicationDate'] = $this->request->getPost('publicationDate');
            $data['estimatedDuration'] = $this->request->getPost('estimatedDuration');
            $data['estimatedAmount'] = $this->request->getPost('estimatedAmount');
            $data['deliveryTenderDate'] = $this->request->getPost('deliveryTenderDate');
            $data['modalitySubmission'] = $this->request->getPost('depositMethod');
            $data['serviceId'] = $this->request->getPost('serviceId');
            $data['typeId'] = $this->request->getPost('typeId');
            $data['countryId'] = $this->request->getPost('countryId');
            $data['wp_id'] = (! empty($this->request->getPost('wp_id'))) ? $this->request->getPost('wp_id') : null;
        }
print_r($data);
 
$this->model->save($data);

the print_r of $data
PHP Code:
Array ( [id] => 587 [modifiedBy] => 8403 [modifiedOn] => 2024-04-09 20:35:11 [title] => Mission de consultance sur les consortiums/fusions [summaryMarket] =>

La mission de consultance a pour objectif de réaliser un état des lieux et d’accompagner ACODEV et ses membres afin de mieux comprendre les intentions du secteur et d’identifier les conditions et méthodes pour les appuyer dans d’éventuels processus de mise en place de consortium et/ou de mise en commun de services et/ou de fusions.Partie A 1. Disposer d’une revue documentaire de la question 2. Disposer d’un état des lieux approfondi des intentions des membres d’ACODEV concernant la mise en place de consortiums et de fusions d’organisations 3. Animer un débat et/ou des travaux de groupes soit lors de l’assemblée générale d’ACODEV (juinsoit lors d’un autre atelier/événement spécifique (même périodequi aboutissent à une note de positionnement sur la question et/ou un mandat pour le secrétariat de la fédération Partie B 4. Elaborer un rapport et un guide qui propose des méthode d’accompagnement des organisations souhaitant s’engager sur la voie d’un consortium ou d’une fusion 5. Mener éventuellement un coaching d’organisations souhaitant s’inscrire dans cette démarche
[isPublicMarket] => [executionPeriodFrom] => 2022-05-01 [executionPeriodTo] => 2022-10-31 [publicationDate] => 2022-04-01 [estimatedDuration] => 20 [estimatedAmount] => 199.99 [deliveryTenderDate] => 2022-04-26 [modalitySubmission] => [serviceId] => [typeId] => [countryId] => [wp_id] => 144 
As you can see, the 2 problematic fields are present in $data. I checked the spelling in the database and it's ok there too. What concerns me is even if I put $allowedFields = [], the insertion and modification (except the 2 fields) work. 
The debug gives me as query
PHP Code:
UPDATE `tendersSET `id` = '587', `title` = 'Mission de consultance sur les consortiums/fusions', `summaryMarket` = '<p>La mission de consultance a pour objectif de réaliser un état des lieux et d’accompagner ACODEV et ses membres afin de mieux comprendre les intentions du secteur et d’identifier les conditions et méthodes pour les appuyer dans d’éventuels processus de mise en place de consortium et/ou de mise en commun de services et/ou de fusions.Partie A : 1. Disposer d’une revue documentaire de la question 2. Disposer d’un état des lieux approfondi des intentions des membres d’ACODEV concernant la mise en place de consortiums et de fusions d’organisations ; 3. Animer un débat et/ou des travaux de groupes soit lors de l’assemblée générale d’ACODEV (juin) soit lors d’un autre atelier/événement spécifique (même période) qui aboutissent à une note de positionnement sur la question et/ou un mandat pour le secrétariat de la fédération Partie B : 4. Elaborer un rapport et un guide qui propose des méthode d’accompagnement des organisations souhaitant s’engager sur la voie d’un consortium ou d’une fusion 5. Mener éventuellement un coaching d’organisations souhaitant s’inscrire dans cette démarche</p>', `isPublicMarket` = '0', `executionPeriodFrom` = '2022-05-01', `executionPeriodTo` = '2022-10-31', `publicationDate` = '2022-04-01', `estimatedDuration` = '20', `estimatedAmount` = '199.99', `deliveryTenderDate` = '2022-04-26', `modalitySubmission` = '1', `serviceId` = '4', `typeId` = '6' WHERE `tenders`.`idIN ('587'

The 2 fields are not in the query. There you go, I don't know what lead anymore, I can investigate.
Thanks in advance
Reply
#2

First, upgrade to v4.4.8.

Second, if there is still the issue, find out where the two fields are gone.
For example, check the data in Model::doUpdate().
If you can do step debugging, do it.
Reply
#3

(04-11-2024, 06:09 PM)kenjis Wrote: First, upgrade to v4.4.8.

Second, if there is still the issue, find out where the two fields are gone.
For example, check the data in Model::doUpdate().
If you can do step debugging, do it.

Thanks Kenijs for your answer...
I just found the problem I was not modifying the correct Model, VSCode always offered me the "Backup" file first...  Blush

[Image: backupModel.png]
Reply




Theme © iAndrew 2016 - Forum software by © MyBB