Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel - Trying to access array offset of value of type int

I have an issue when I try to submit post requests to the database. The interesting thing is, that the error only occurs when I use PHP version 7.4.2. In PHP version 7.3.9 everything works fine. I am using Laravel 6.17.

When is Laravel going to fix this issue ?

That's my stack trace, when the error comes up.

Trying to access array offset on value of type int   
in CreateCourseController.php line 176
at HandleExceptions->handleError()
in CreateCourseController.php line 176
at CreateCourseController->createDates()
in CreateCourseController.php line 101
at CreateCourseController->createCourse()
at call_user_func_array()
in Controller.php line 54
at Controller->callAction()
in ControllerDispatcher.php line 45
at ControllerDispatcher->dispatch()
in Route.php line 219
at Route->runController()
in Route.php line 176
at Route->run()
in Router.php line 681
at Router->Illuminate\Routing\{closure}()
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}()
in SubstituteBindings.php line 41
at SubstituteBindings->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in VerifyCsrfToken.php line 76
at VerifyCsrfToken->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in StartSession.php line 56
at StartSession->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in EncryptCookies.php line 66
at EncryptCookies->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in Pipeline.php line 105
at Pipeline->then()
in Router.php line 683
at Router->runRouteWithinStack()
in Router.php line 658
at Router->runRoute()
in Router.php line 624
at Router->dispatchToRoute()
in Router.php line 613
at Router->dispatch()
in Kernel.php line 170
at Kernel->Illuminate\Foundation\Http\{closure}()
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}()
in TransformsRequest.php line 21
at TransformsRequest->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in TransformsRequest.php line 21
at TransformsRequest->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in ValidatePostSize.php line 27
at ValidatePostSize->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in CheckForMaintenanceMode.php line 63
at CheckForMaintenanceMode->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in TrustProxies.php line 57
at TrustProxies->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in Pipeline.php line 105
at Pipeline->then()
in Kernel.php line 145
at Kernel->sendRequestThroughRouter()
in Kernel.php line 110
at Kernel->handle()
in index.php line 55

Regards

like image 428
NKol Avatar asked Feb 26 '20 11:02

NKol


4 Answers

You are probably trying accessing a non-array type (probably an object type).

I have encountered the same though but the difference it makes is that one snippet accesses an object while the other accesses a valid array type.

The code below produces the error Trying to access array offset of value of type int

$mymodel = MyModel::where(array(
            'someid' => $somevar
        ))->get();
foreach($mymodel as $data){
     //etc
}

I tried updating it to:

$mymodel = MyModel::where(array(
            'someid' => $somevar
        ))->get()->toArray();
foreach($mymodel as $data){
     //etc
}

But it would be really helpful that you post your code so we can further check.

like image 61
Charmie Avatar answered Oct 05 '22 23:10

Charmie


Similar issue is already listed on Laravel repository

According to PHP-Doc this is a Backwards Incompatible Change in PHP 7.4

Array-style access of non-arrays

bool, int, float or resource as an array (such as $null["key"]) will now generate a notice.

like image 23
Sehdev Avatar answered Oct 05 '22 22:10

Sehdev


If you use php 7.4 and a used package has developed to php <7.4 then shows this error.

Change your php version to an old version (example, php 7.4 to 7.3).

I used php 7.4 FPM but fixed version of mPDF worked with php 7.3 and below. I caught this error, after I changed php version to 7.3 and it worked.

I also used Homestead. See my config for php:

sites:
    - map: myapp.test
      to: /home/vagrant/code/myapp/public
      php: "7.3"

Run vagrant reload --provision in CLI. This command applies the new config.

like image 26
Oleg Dmitrochenko Avatar answered Oct 05 '22 22:10

Oleg Dmitrochenko


composer update worked for my case:

I had a Laravel 5.6 app, with Php 7.1.

Also, I had to change laracasts/generators in composer.json to ^1.0 from dev-master to get composer update going, ike so:

"laracasts/generators": "^1.0"

Started having this issue working back on some old projects, the issue occurs on php artisan migrate right after composer install.

https://github.com/spatie/laravel-permission/issues/1370#issuecomment-676556816

like image 45
doncadavona Avatar answered Oct 05 '22 22:10

doncadavona