Search code examples
phpcodeigniter-4

Adding param with value to array


I have this code:

    $campaignUserModel = new CampaignUserModel();
    $subcontractors = $campaignUserModel
        ->select('campaigns_users.*, users.fullname user_fullname')
        ->join('users', 'users.id = campaigns_users.user_id')
        ->where('campaign_id', $id)
        ->findAll();

    $postModel = new PostModel();
    foreach ($subcontractors as $subcontractor) {
        $subcontractor_posts = $postModel
            ->where('user_id', $subcontractor['id'])
            ->where('campaign_id', $id)
            ->countAllResults();

        $subcontractor['posts_count'] = $subcontractor_posts;

        echo "<pre>";
        var_dump($subcontractor);
        echo "</pre>";
    }

    echo "<pre>";
    var_dump($subcontractors);
    echo "</pre>";

In first var_dump() I see:

array(7) { ["id"]=> string(1) "3" ["campaign_id"]=> string(1) "1" ["user_id"]=> string(1) "3" ["quantity"]=> string(1) "2"
["status"]=> string(1) "2" ["user_fullname"]=> string(17) "Edek Podwykonawca" ["posts_count"]=> int(1) }

so posts_count is added. But when foreach finished and I display second var_dump() with array of all subcontractor i can't see posts_count.

Where am I making a mistake?


Solution

  • You need to pass the $subcontractor variable by reference:

    I.e:

    Instead of:❌

    // ...
     foreach ($subcontractors as $subcontractor) {
    // ...
    

    Use this:✅

    // ...
     foreach ($subcontractors as &$subcontractor) {
    // ...
    

    Notice the ampersand (&) infront of $subcontractor

    Resource: References Explained