【发布时间】:2016-05-24 15:13:05
【问题描述】:
我正在构建一个网络应用程序,允许人们与老师预约时间。按照目前的情况,一旦将时间添加到用户购物车中,其他人就无法看到该时间可用或将其添加到他们的购物车中。
我正在使用darryldecode's shopping cart,只要会话持续(2 小时),项目就会存储在其中。但是,我希望在添加 5 分钟后自动从中删除项目。为了做到这一点,我设置了一个延迟 5 分钟的排队作业。
我的问题是,该作业将时间更改为在 5 分钟后再次对其他用户可见,但不会将其从购物车中删除,因为它似乎无法访问存储购物车数据的会话。谁能建议我如何从排队的作业中访问存储在会话中的购物车数据? 谢谢。
这是工作的代码,除了 Cart::remove() 之外的一切都正常
namespace App\Jobs;
use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\TimeSlot;
use Cart;
class RemoveTimeSlotFromCart extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;
public $timeSlot;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(TimeSlot $timeSlot)
{
$this->timeSlot = $timeSlot;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$timeSlot = $this->timeSlot;
if ($timeSlot->booked == 0 && $timeSlot->in_basket == 1) {
$timeSlot->in_basket = 0;
$timeSlot->save();
Cart::remove($timeSlot->id);
}
}
}
【问题讨论】:
-
您需要在将其丢弃之前获取开放预订的列表,以便将它们从购物车中释放。这一切都需要由您的排队作业处理 - 您能分享一下您目前如何从数据库中清除它们吗?
-
我不确定您所说的“开放预订”是什么意思,抱歉。当前,当将时间添加到购物车时,它的“in_cart”值在数据库中设置为 1,然后在 5 分钟后由排队作业自动设置回 0。问题是我无法在作业中使用 Cart 外观,因为作业似乎无法访问它。也许可以,但我做错了什么?
-
你能分享一下你工作的代码吗?
-
添加到最初的帖子中,谢谢。
标签: php laravel laravel-5.2