У меня есть отношения, в которых я сегментирую по языку и вывожу пользователю с помощью почтальона. Но вместе с этим приходят и отношения, которых я не хочу. Пробовал удалить с отключением, но не получилось, просто пытаюсь фильтровать по языку.
Если вы предложите другой метод, я тоже могу попробовать
моя база данных
{"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, но вообще не помогло.
Чтобы скрыть отношения, добавьте имя метода отношения в свойство $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();
покажи свою
Favorite
модель и ее отношения