Как получить массив строк вместо объекта с помощью функции ()? - PullRequest
0 голосов
/ 17 января 2020

Это Laravel ProductController и Products имеет отношение многие ко многим с тегами.

/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    $products = Product::with('tags')->latest()->get();
    return response()->json($products);
}

В ответе json, если я сопоставляю продукты, продукт. tag возвращает массив объектов.

[{"name": "shirt"}, {"name": "red"}]

Есть ли способ получить только свойство name в с ('tags') на контроллере, например:

["shirt", "red"]

Также я пробовал что-то вроде этого:

/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    $products = Product::with(['tags' => function ($query) {
        $result = $query->select(['name']);
        return $result->get();
    }])->latest()->get();
    return response()->json($products);
}

Возможно ли фильтровать данные внутри функции тегов?

1 Ответ

0 голосов
/ 18 января 2020

Вам, вероятно, следует использовать класс Resource, чтобы возвращать только элементы, необходимые в вашем API. Это включает в себя возможность обрабатывать дочерние отношения. См. https://laravel.com/docs/6.x/eloquent-resources#generating -ресурсы

Или, вы можете сделать это так, как вы пытались с select, но больше похоже на;

    $products = Product::with(['tags' => function ($query) {
        return $query->select(['name']);
    }])->latest()->get();
...