Laravel firstOrCreate со связями, не возвращающими экземпляр модели - PullRequest
0 голосов
/ 03 октября 2018

Я использую firstOrCreate (), чтобы найти первый счет или создать его.Этот код работал на прошлой неделе, затем внезапно перестал работать.

Что работает: запись базы данных сгенерирована и ошибок нет.

Проблема: firstOrCreate возвращается пустым.{}

Код:

$invoice = Invoice::firstOrCreate(
            [
                'user' => $user->id,
                'package' => $package->id,
                'term' => $pricing->term,
                'paid' => 0
            ], [
                'amount' => $pricing->price,
                'hash' => 'omittedforSO',
                'coupon' => null
            ]
)->with(['billingInfo', 'package', 'price', 'coupon']);

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы должны позвонить with() до firstOrCreate()

$invoice = Invoice::with(['billingInfo', 'package', 'price', 'coupon'])->firstOrCreate(
        [
            'user' => $user->id,
            'package' => $package->id,
            'term' => $pricing->term,
            'paid' => 0
        ], [
            'amount' => $pricing->price,
            'hash' => 'notforSO',
            'coupon' => null
        ]
);
0 голосов
/ 03 октября 2018

В соответствии с firstOrCreate и вашей энергичной загрузкой он должен либо найти и вернуть первую модель Invoice, где аргументы (первый массив) совпадают с дополнительными атрибутами в виде массивов, содержащих отношения, которые вынаписано или создайте Invoice со значениями вашего второго аргумента.

С учетом вышесказанного он никогда не должен возвращать пустой массив, если только вы не отредактировали основной код Laravel.Если вы получите var_dump (dd) с таким результатом ($invoice), он выдаст вам Querybuilder или модель Eloquent (со списком атрибутов с нулевыми значениями).

Убедитесь, что ваши поля находятся в заполняемом массиве модели Invoice

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...