Список заказов не отображается должным образом в laravel api

Я начинающий уровень laravel. Я занимаюсь управлением складом в laravel. Я хочу связать отношения со многими-ко-многим и один-ко-многим, когда я просматриваю данные, которые меня поразили в этой строке, я не знаю, как получить подробную информацию о форме Заказ продукта правильный, мне нужно получить количество в заказе продукта. Может ли кто-нибудь помочь мне выполнить индексную функцию загрузки контроллера порядка? Таблица клиентов, таблица заказов и заказ продуктов, как просмотреть данные в формате JSON:

 foreach ($order->products as $product) 
            {
                $arrayobj['order_products'][] = [
                    'product_id' => $product->id,
                    'product_name' => $product->name, 
                    

                ];

            }

Вот Полный код: вот код продукта и клиента, а также заказ и заказ продукта, который мне нужно, чтобы вы исправили его с помощью индекса части API заказа и функции сохранения внутри контроллера заказа:

клиент

class Client extends Model
{
    use HasFactory;

    protected $primary_key = "id";
    protected $table = "clients";
    protected $fillable = [
        'name',
        'email',
        'phone',
        'address',
    ];

    public function orders()
    {
        return $this->hasMany(Order::class);
    }
}

продукт

class Product extends Model
{
    use HasFactory;
    protected $primary_key = "id";
    protected $table = "products";

    protected $fillable = [
        'product_code',
        'product_name',
        'stock_level',
        'price',
        'category_id',
    ];

    public function category()
    {
        return $this->belongsTo(Category::class, 'category_id');
    }

    public function orders()
    {
        return $this->belongsToMany(Order::class, 'product_orders');
    }

заказ

class Order extends Model
{
    use HasFactory;

    protected $primary_key = "id";
    protected $table = "orders";


    protected $fillable = [
        'order_number',
        'total',
        'client_id',  
    ];



    public function client()
    {
        return $this->belongsTo(Client::class);
    }

    public function products()
    {
        return $this->belongsToMany(Product::class, 'product_orders');
    }

}

Заказ продукта

class ProductOrder extends Model
{
    use HasFactory;
    protected $primary_key = "id";
    protected $table = "product_orders";

    protected $fillable = [
        'product_id',
        'order_id',
        'qty',
    ];
}

вот контролер заказов

// retrieve data from clinet
public function index()
{

    $orders = Order::with(['client', 'products'])->get();

    // create empty array
    $response_array = [];

    // loop orders

    foreach ($orders as $order) 
        {
                $arrayobj = [
                    'order_number' => $order->order_number,
                    'client_id' => $order->client_id,
                    'total' => $order->total,
                    'order_products' => []
                ];

    foreach ($order->products as $product) 
        {
            $arrayobj['order_products'][] = [
                'product_id' => $product->id,
                'product_name' => $product->name, 
            ];

        }


        // array_push()
    }

    return    $response_array;
}

При такой настройке вам не хватает 'qty' => $product->pivot->qty, в цикле foreach.

kalview 20.08.2024 08:10

И, конечно же, если это API, вы должны вернуть json, например: return response()->json($response_array);

kalview 20.08.2024 08:12

это единственное, что нужно сделать, сэр. Метод array_push(), как его вызвать

Vasantha Kalyani 20.08.2024 08:12

можешь написать полный код, так гораздо легче понять

Vasantha Kalyani 20.08.2024 08:12

Заказ ProductOrder также мне нужно установить связь

Vasantha Kalyani 20.08.2024 08:14

просто назначьте таблицу $arrayobj ответу: $response_array[] = $arrayobj;

kalview 20.08.2024 08:16

ProductOrder, как установить связь, пожалуйста, проверьте это. Я не добавил связь

Vasantha Kalyani 20.08.2024 08:19

Для пивота вам не нужно определять Модель, это обязательно.

kalview 20.08.2024 08:19

Давайте продолжим обсуждение в чате.

Vasantha Kalyani 20.08.2024 08:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
9
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вам не нужно создавать модель исключительно для Pivot. Это обязательно.

Для модели Order вы можете определить отношения следующим образом:

public function products()
{
   return $this->belongsToMany(Product::class)->withPivot('qty');
}

и для продукта:

public function orders()
{
   return $this->belongsToMany(Order::class)->withPivot('qty');
}

Затем вы можете получить доступ к Pivot, например:

foreach ($order->products as $product) {
        $orderData['order_products'][] = [
            /// ...
            'qty' => $product->pivot->qty // Access to the Pivot 
        ];
    }

    return response()->json($orderData);

Модель ProductOrder, нам не нужно устанавливать отношения, сэр.

Vasantha Kalyani 20.08.2024 08:29

protected $fillable = ['product_id', 'order_id', 'qty',]; вот модель заказа продукта

Vasantha Kalyani 20.08.2024 08:30

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