Почему не подгружается кастомный атрибут?

Есть Клиника, у которой много Врачей. У Врача есть кастомное свойство "custom_atr", которое я хочу добавить к выдаче (знаю что можно прописать в классе модели protected $appends = ['custom_atr'];, но это будет распространяться всегда.)

Вот код.

$clinic = $clinic->find(1);
$clinic->load([
    'doctors' => function ($q) {
        $q->each(function ($doctor) {
            $doctor->append('custom_atr');
        });
    }
]);


После сериализации этого поля у Доктора нет.
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
greabock
@greabock
Могу
Замыкание, передаваемое в метод "load" модели или в метод "with" построителя запросов, принимает на вход Illuminate\Database\Eloquent\Relations\Relation (в данном случае, возможно HasMany или BelongsToMany). То есть, это тоже самое, как если бы вы написали:
$clinic->doctors()->each(function ($doctor) {
    $doctor->append('custom_atr');
})

Что не привело бы ни к какому результату, в виду того факта, что в Eloquent нет IdentityMap, который позволил бы связать записи вытаскиваемые при обходе each() c записями находящимися в отношении.
А вот что действительно поможет:
$clinic = Clinic::with('doctors')->find(1);
$clinic->doctors->each(function ($doctor) {
    $doctor->append('custom_atr');
});

Здесь мы делаем итерации над уже загруженными докторами.
Вообще, в данном конкретном случае, когда нас интересует одна конкретная клиника, даже `with` - лишний шаг, потому, что на следующей строке доктора все равно будут лениво загружены. Но для ясности можно и оставить.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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