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; }
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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 }
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0