VariusRain
@VariusRain
музыкант-программист-конструктор

Eloquent Save не обновляет данные. Один и тот же код, разные сервера. Что может быть не так?

Приветствую всех!

Искал ответ на свою ситуацию и нашёл вот это вопрос
Но решение оттуда мне не помогло.

Ситуация следующая. Я использую Eloquent в отрыве от Laravel
Подключаю через композер последнюю версию ()

Суть следующая: я работаю с удалённой базой данных, к изменению структуры которой, у меня доступа нет.

Пока проверяю всё на локальном сервере, под виндой (OpenServer), всё прекрасно, всё работает.
Как только заливаю на прод (Линукс) то при попытке вызвать save()
у модели, ничего не происходит. Метод по прежнему возвращает true.
Но данные в таблице не меняются.

В модели прописано
protected $table = 'SomeTableName';
protected $primaryKey = "Id";
public $timestamps = false;

Было предположение, что косяк в первичном ключе. По крайней мере по началу именно из-за того, что в базе он начинается с большой буквы, создание записей тоже не происходило.

После добавления свойства ошибка с записью пропала, а вот с апдейтом нет.
$user = Profile::where('Email', $req->email)->first();
$user->recovery_token = 'some data';
$user->save();

Опять-таки из-за разности систем подумал, что косяк может быть в регистре, поэтому перепроверил. В коде поле называется ровно так же, как в базе, всё в нижнем регистре.

Идеи кончились совершенно.

Подскажите пожалуйста, в чём ещё может быть причина подобного поведения?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
VariusRain
@VariusRain Автор вопроса
музыкант-программист-конструктор
И так, решение я нашёл. Очевидность этого решения оставляет желать лучшего, но, надеюсь, если кто-то столкнётся с такой же проблемой, то это ему поможет.

На поиск решения меня натолкнул ответ товарища Илья

Я попытался подключить "прослушку" запросов к базе и запись их в лог файл, так как иначе на проде поступить просто нет возможности.

Так как я использую Eloquent вне фреймворка, то тут пришлось поколдовать.
Там же, где у меня объявляется капсула для задания конфигов подключения к БД дописал.

use Illuminate\Database\Capsule\Manager as DB;
...
DB::listen(function ($query) {
			file_put_contents(BasePath("files/DB.log"), $query->time.' - '.$query->sql.' ['.json_encode($query->bindings).']'.PHP_EOL, FILE_APPEND);
		});

И вот тут я столкнулся с очень интересной ситуацией. Этот код работал на локальном сервере и не работал на на удалённом.
Это странно и так быть не должно и не может, так как здесь же устанавливались настройки подключения к базе, а к базе подключение происходит нормально, но факт остаётся файтом.

А результате решением стал перевод всех имён файлов и классов в нижний регистр.
и обновление файла автолоад композера.

Тупость? Возможно.. Но это сработало. Конкретно у меня был один скрипт APIController.php и в нём одноимённый класс. После переименования в apicontroller как имени файла, так и класса, всё стало работать как надо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
New_Horizons
@New_Horizons
Бред:
Попробуй посмотреть, какие запросы в базу уходят
https://laravel.com/docs/5.8/database#listening-fo...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы