我无法使用Crinsane / LaravelShoppingcart从数据库恢复购物车数据

时间:2017-12-05 09:11:48

标签: php database laravel e-commerce laravel-5.5

我正在使用Crinsane / LaravelShoppingcart包,我在shoppingcart tabel上做了一些编辑,当我迁移它并添加这样的

    Schema::create(config('cart.database.table'), function (Blueprint $table) {
        $table->string('identifier');
        $table->integer('userId')->unsigned();
        $table->text('address');
        $table->string('instance');
        $table->longText('content');
        // $table->nullableTimestamps();
        $table->timestamps();



        $table->primary(['identifier', 'instance']);
        $table->foreign('userId')->references('id')->on('users')->onDelete('cascade');
    });

并且还编辑了商店方法(添加了两个pramater来存储$ userId和$ address)在这个Cart类中

public function store($identifier, $address, $userId)
{
    $content = $this->getContent();

    if ($this->storedCartWithIdentifierExists($identifier)) {
        throw new CartAlreadyStoredException("A cart with identifier {$identifier} was already stored.");
    }

    $this->getConnection()->table($this->getTableName())->insert([
        'identifier' => $identifier,
        'address' => $address,
        'userId' => $userId,
        'instance' => $this->currentInstance(),
        'content' => serialize($content)
    ]);

    $this->events->fire('cart.stored');
}  

并且所有工作都在数据库中工作得非常好,但问题是当我使用还原方法从数据库恢复数据时只使用一个参数($ identifier)进行恢复时它没有给我任何东西,当我发现时(Cart :: restore(Auth) :: user() - > id))它给我“null”请帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

您已修改store方法以接受$userId,但您说restore方法无法正常工作。您也可以通过修改restore接受$userId来修复此特定问题,因为您已将其用户ID传递给它,但它会根据idenfitier列对其进行检查在shoppingcart数据库中。

然而,这仍然是一个坏主意。您永远不应该修改第三方软件包,因为它会被下一个composer update覆盖。

更好的解决方案是使用$identifer来存储Auth::user()->id。如果您需要为每个用户存储多个购物车,则可以使用此包的心愿单功能。作为最后的手段,您可以简单地将id与标识符连接起来,例如。 'firstcart'+userId'secondcart'+userId