Нет результатов, когда стремятся к загрузке отношения, но отношения существуют - PullRequest
1 голос
/ 30 апреля 2020

У меня есть 2 модели, использующие UUID. Я создал абстрактный класс с именем Model , который расширяет \ Illuminate \ Database \ Eloquent \ Model и устанавливает следующее значение по умолчанию:

public $incrementing = false;

Моя проблема в том, что отношение lines НЕ возвращает никаких результатов при использовании -> with ('lines'), но если я не использую -> with ('lines'), оно возвращает Результаты:

Пример 1 (FAILS):

$lines_count = Order::whereId($id)->with('lines')->first()->lines->count(); // 0

Пример 2 (WORKS):

$lines_count = Order::whereId($id)->first()->lines->count(); // 2

Пример 3:

$quotation = Order::whereId($quotation_id)
    ->with('lines')
    ->withCount('lines')
    ->firstOrFail();
dd($quotation->lines_count.' - '.$quotation->lines); // Returns "2 - 0"

Отношения:

Заказ

class Order extends Model {
    public function lines()
    {
        return $this->hasMany(OrderLine::class, 'order_id', 'id');
    }
}

OrderLine

class OrderLine extends Model {
    public function order()
    {
        return $this->belongsTo(Order::class, 'order_id', 'id');
    }
}

Заранее спасибо! Я действительно борюсь.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Laravel в версии 6 начал выполнять оптимизацию загрузки, когда поля объединения являются целыми числами, что является предположением по умолчанию.

Однако, если у вас есть UUID, которые являются строками, вы должны указать это в своей модели, используя:

public $incrementing = false;
protected $keyType = 'string';

Подробнее в документах

0 голосов
/ 30 апреля 2020

Проблема заключалась в том, что ранее при использовании UUID я устанавливал только $ increment, равный false, но, по-видимому (возможно, из Laravel 7), он также изменил значение переменной $ keyType. По умолчанию для него было установлено значение int, поэтому мои UUID были преобразованы в «0».

Причина, по которой я смог получить отношения после загрузки модели, заключается в том, что мой UUID был выведен из БД, тогда как при работе с активной загрузкой, я предполагаю, что она несколько более строгая (и принимает только значения, соответствующие $ keyType).

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