Странная проблема с отношениями в Laravel - PullRequest
0 голосов
/ 28 января 2020

У меня есть что-то вроде этого в моем контроллере:

namespace App\Http\Controllers;

use App\Invoice;
use Illuminate\Http\Request;

class PaymentController extends Controller
{
    public function pay( Invoice $invoice ) {
        $product = $invoice->product;

        return $invoice;
    }
}

Я использую Eloquent Relationships и когда я возвращаю модель счета-фактуры, Laravel присоединяется к ней с родительским отношением (продуктом)! Почему это происходит?

1 Ответ

1 голос
/ 28 января 2020

Причина добавления отношения product при возврате счета-фактуры заключается в том, что вы вызываете следующее:

$product = $invoice->product;

Это происходит потому, что Laravel загружает отношение при его вызове и сохраняя его с моделью счета. Это делается для того, чтобы при повторном вызове product для того же экземпляра этого объекта он не выполнял другой запрос к базе данных.

В результате он возвращает модель счета-фактуры с уже загруженным отношением. Либо не загружайте отношение продукта (зависит от того, нужно оно вам или нет), либо IIR C, вы можете скрыть отношение при возврате, чтобы оно просто возвращало модель счета. Вы должны быть в состоянии сделать что-то вроде этого:

return $invoice->makeHidden('product');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...