Home > Back-end >  Insert query works fine on my local but doesn't execute on my live database (Laravel/MySQL)
Insert query works fine on my local but doesn't execute on my live database (Laravel/MySQL)

Time:10-04

I have a very simple function that loops through an array and inserts some data into a results table - this works perfectly fine on my local using the very same code. On my local setup (Mac) using Laravel Valet & an MySQL database it hits the function Result::create($data) and inserts this data in the database. However on the live/remote site it never hits the Result::create() within the insertUniqueMatches for some reason.

I have added the db user in the env file and it has been granted all privileges so I cannot understand why this won't insert the entry into the results table. Can anyone explain what I am doing wrong? All migrations have been ran to ensure my local and live db are identical.

P.S i have tried both the $fillable variable with all the relevant items in the array and also with the $guarded as a blank array and the problem persists.

class Result extends Model
{
    use HasFactory;

    // protected $fillable = ['match_id', 'home_team_id', 'away_team_id', 'home_team_goals', 'away_team_goals', 'outcome', 'match_date', 'properties', 'platform_id'];
    protected $guarded = [];
    public static function insertUniqueMatches($matches, $platform = null)
    {
        $inserted = 0;
        foreach ($matches as $match) {
            // check if existing match already exists in the db, if so don't re-insert this
            if (Result::where('match_id', '=', $match['matchId'])->doesntExist()) {
                $carbonDate = Carbon::now();
                $carbonDate->timestamp($match['timestamp']);
                $clubs = collect($match['clubs'])->values();

                $data = [
                    'match_id' => $match['matchId'],
                    'home_team_id' => $clubs[0]['id'],
                    'away_team_id' => $clubs[1]['id'],
                    'home_team_goals' => $clubs[0]['goals'],
                    'away_team_goals' => $clubs[1]['goals'],
                    'outcome' => self::getMatchOutcome($clubs[0]),
                    'match_date' => $carbonDate->format('Y-m-d H:i:s'),
                    'properties' => json_encode([
                        'clubs' => $match['clubs'],
                        'players' => $match['players']
                    ]),
                    'platform_id' => $platform
                ];
                
                dump($data); // this shows valid data in the terminal
                // this if condition is only reached on my local development but never on live so no inserts happen on the live DB
                if (Result::create($data)) {
                    $inserted  ;
                    dump('inserted matchId: '. $match['matchId']); // never see this on line but always on local
                }
            }
        }

        return $inserted;
    }

CodePudding user response:

i think better solution for now is you can find the problem. you could write code into try-catch for more information. replace this code

try {
   Result::create($data);
} catch (\Exception $e) {
   dd($e);
}

with:

dump($data); // this shows valid data in the terminal
                // this if condition is only reached on my local development but never on live
                if (Result::create($data)) {
                    $inserted  ;
                    dump('inserted matchId: '. $match['matchId']); // never see this on line but always on local
                }
  • Related