Как избавиться от распечатки отношений?

У меня есть отношения, в которых я сегментирую по языку и вывожу пользователю с помощью почтальона. Но вместе с этим приходят и отношения, которых я не хочу. Пробовал удалить с отключением, но не получилось, просто пытаюсь фильтровать по языку.

Если вы предложите другой метод, я тоже могу попробовать

моя база данных

{"en":"English Machine Name","tr":"Türkçe Makine Adı"}

public function all(Request $request)
    {
        $locale = $request->header('Accept-Language', App::getLocale());
        $searchValue = $request->input('search_value');

        $favoriteAll = Favorite::where('user_id', Auth::id())
            ->when($searchValue, function ($query) use ($searchValue) {
                $query->with(['favoriMachine' => function ($query) use ($searchValue) {
                    $query->where('name', 'like', '%' . $searchValue . '%')
                        ->orWhere('address', 'like', '%' . $searchValue . '%');
                }]);
            })
            ->get();

        $result = $favoriteAll->map(function ($favorite) use ($locale) {
            if ($favorite->favoriMachine) {
                $favorite->favoriMachine = $favorite->favoriMachine->map(function ($machine) use ($locale) {
                    return [
                        'id' => $machine->id,
                        'name' => $machine->name[$locale] ?? $machine->name['en'] ?? $machine->name,
                        'description' => $machine->description[$locale] ?? $machine->description['en'] ?? $machine->description,
                        'images' => $machine->images,
                        'location' => $machine->location,
                        'address' => $machine->address,
                        'lat' => $machine->lat,
                        'lng' => $machine->lng,
                        'dealer_id' => $machine->dealer_id,
                        'is_active' => $machine->is_active,
                        'type' => $machine->type
                    ];
                });
            }
            return $favorite;
        });

        return response()->json([
            'status' => 200,
            'message' => 'Success',
            'data' => $result
        ]);
    }

Пробовал удалить с помощью unset, пробовал удалить с return, но вообще не помогло.

покажи свою Favorite модель и ее отношения

kris gjika 05.07.2024 10:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
1
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы скрыть отношения, добавьте имя метода отношения в свойство $hidden вашей модели Eloquent.

class Favorite extends Model
{
    protected $hidden = ['favori_machine'];
}

Источник: https://laravel.com/docs/11.x/eloquent-serialization#hiding-attributes-from-json

если вы хотите скрыть данные таблицы «favoriMachine», но хотите проверить какое-то условие, используйте «whereHas»

источник: https://laravel.com/docs/11.x/eloquent-relationships#querying-relationship-existence

 $favoriteAll = Favorite::where('user_id', Auth::id())
        ->when($searchValue, function ($query) use ($searchValue) {
            $query->whereHas('favoriMachine' => function ($query) use ($searchValue) {
                $query->where('name', 'like', '%' . $searchValue . '%')
                    ->orWhere('address', 'like', '%' . $searchValue . '%');
            });
        })
        ->get();

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