Laravel model find return null для существующего идентификатора

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

Creating default object from empty value

Этот идентификатор существует в базе данных, но по-прежнему возвращает значение null.

$model = Shoppinglist::find($id);
$model->buy_it = 1;
$model->qty= $qty;
$model->save();

Эта проблема начинается, когда я меняю тип количества столбцов с на (10) на float, потому что я хочу сохранить плавающие значения в столбце db. Я потратил несколько часов на эту проблему, но все еще не могу ее решить. У меня есть проверка, предоставив значение статического идентификатора вместо переменной $ id. Я проверил, преобразовав $ id в int.

так что если вы dd ($ model); сразу после оператора find вы получаете null?

wheelmaker 12.10.2018 16:00

что показывает dd($model)?

Exterminator 15.10.2018 06:28

dd ($ model) возвращает значение null.

Waseem Bashir 15.10.2018 06:35

что показывает echo $id?

Exterminator 15.10.2018 07:02

Для этого нам понадобится схема вашей базы данных и код вашей модели.

online Thomas 15.10.2018 10:11

Опубликуйте схему своей базы данных с классом вашей модели.

Nilesh 19.10.2018 21:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
6
4 745
7

Ответы 7

Перед использованием find($id) вы должны убедиться, что ключ в вашей таблице является первичным ключом, в противном случае вы можете использовать where('id', $id)->get().

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

protected $table = "shopping_lists"

в вашем файле модели ShoppingList

или проверьте, совпадает ли название вашей модели и название таблицы

возможно, значение $id рассматривается как строка, поэтому попробуйте использовать intval()

$model = Shoppinglist::find(intval($id));
$model->buy_it = 1;
$model->qty= $qty;
$model->save();

или если вам нужен новый метод, вы можете попробовать использовать first() или findOrFail() вместо find()

$model = Shoppinglist::first(intval($id));
$model = Shoppinglist::findOrFail(intval($id));

В этом вопросе есть кейсы, которые стоит рассмотреть.

Во-первых, я предлагаю явно объявить первичный ключ в вашей модели:

protected $primaryKey = 'shopping_list_id'; // or 'id' depending on your specified primary key

В большинстве сценариев пользователь создает другой первичный ключ, например shoppinglist_id вместо id, затем обнаруживает, что функция не работает, вам нужно добавить

protected $primaryKey = 'shoppinglist_id';

Вы должны добавить приведенный выше код в список покупок вашей модели.

Альтернативно

$shopping = Shoppinglist::where('table_priamry_key', $id)->first();
dd($shopping); 

если вы используете мягкое удаление, добавьте программное удаление, чтобы получить результат

Надеюсь, это поможет кому-то, кто столкнется с этим позже. У меня была та же проблема, которая возникла из-за первичного ключа моей модели. Я установил $primaryKey = another_field, который не указывал на id, который я пытался достать. Так что все, что я сделал, это установил $primaryKey = 'id', и все было круто. Удачного кодирования ...

Если у вас не установлено свойство $ primaryKey в вашем МОДЕЛЬ, оно будет предполагать я бы.

Метод find () находит Модель по свойству $ primaryKey. Поэтому, если вы хотите изменить первичный ключ по умолчанию в Eloquent, вам это понадобится.

protected $primaryKey = 'email';

Другие вопросы по теме