Как я могу добавить Laravel данные корзины Crinsane как заказ? - PullRequest
0 голосов
/ 18 февраля 2020

Чтобы создать заказ из корзины на основе Crinsane и связать его с (аутентифицированным) пользователем, я создал модель Заказ и попробовал следующее в контроллере заказов.

<?php

namespace App\Http\Controllers;

use Cart;
use App\Order;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use App\Http\Controllers\Controller;

class OrderController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth:api');
    }
    /**
     * store cart to authenticated user as order.
     *
     */
    public function store(Request $request)
    {
        $order = new Order;

        $cartcontent = Cart::content();
        $user = auth('api')->user();
        $serializedcontent = $cartcontent->toJson(); //Returns []
        //$serializedcontent = $cartcontent->toArray(); //error
        //$serializedcontent = str_replace("\0", "~~NULL_BYTE~~", serialize($cartcontent)); //returns 0:29:"Illuminate....

        $order->user_id= $user->id;
        $order->cart_content= $serializedcontent;
        $order->save();

    }
}

Редактировать:

Я пробовал с типом столбца как TEXT (без сериализации), а также JSON. Я использую Json API для внешнего интерфейса (Vue) и JWT для аутентификации.

Столбец приводит к пустому набору [] при сериализации в JSON. Если я не сериализуюсь, он возвращает O:29:"Illuminate\Support\Collection":1:{s:8:"~~NULL_BYTE~~*~~NULL_BYTE~~items";a:0:{}}

Модель заказа:

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
        protected $fillable = [
        'user_id','user_id','cart_content'
    ];
        public function User(){
        return $this->belongsTo('App\User');
    }
}

Ссылка на источник: https://github.com/riyaz7us/Laraman/tree/master/app/Http/Controllers

1 Ответ

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

Из документов

Корзина :: content () Конечно, вы также хотите получить содержимое корзины. Здесь вы будете использовать метод контента. Этот метод возвращает коллекцию CartItems, которую вы можете перебирать и показывать контент своим клиентам.

Вы пытаетесь вставить коллекцию в базу данных. Вам нужно получить данные с карты current instance of the Crinsane, а затем вставить данные в базу данных как json или как вам нужно.

...