Список заказов не отображается должным образом в 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;
}

🤔 А знаете ли вы, что...
В PHP есть много встроенных функций для работы с строками, массивами и файлами.


50
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);