#laravel #laravel-7 #laravel-6
Вопрос:
// tables -------------------------------------------------------------
order table - user_id, etc
order_items table - order_id, product_id, price,qty
review table - user_id, product_id etc
Я хочу разрешить просмотр только для тех, кто приобрел продукт. это мой последний годовой продукт. Вы можете мне помочь, пожалуйста?
// saving review table
$review = new Review();
$review->review_des = $request->review_des;
$review->rating = $request->rating;
$review->title = $request->review_title;
$review->user_id = Auth::id();
$review->product_id = $request->product_id;
$review->save();
Alert::success('You have successfully added a review to this product.', 'Success Message');
return redirect()->back();
Ответ №1:
Поскольку у пользователя может быть много купленных продуктов, а у продукта может быть много покупателей, создайте purchases
сводную таблицу, содержащую идентификатор покупателя и идентификатор продукта (отношение «Многие ко многим»).
public function up()
{
Schema::create('buyer_purchase', function (Blueprint $table) {
$table->bigInteger('buyer_id')->unsigned();
$table->foreign('buyer_id')->references('id')->on('users')->onCascade('delete');
$table->bigInteger('purchase_id')->unsigned();
$table->foreign('purchase_id')->references('id')->on('products')->onCascade('delete');
});
}
Установите взаимосвязь в файлах модели:
// User.php
public function purchases()
{
return $this->belongsToMany('AppProduct', 'buyer_purchase', 'buyer_id', 'purchase_id');
}
// Product.php
public function buyers()
{
return $this->belongsToMany('AppUser', 'buyer_purchase', 'purchase_id', 'buyer_id');
}
Затем в своем ProductPolicy
файле задайте условие авторизации для определенного действия:
public function review(User $user, Product $product)
{
return $product->buyers->contains($user->id);
}
Наконец, в вашем ProductController
, проверьте, имеет ли пользователь право совершать такие действия:
public function review(Request $request, Product $product)
{
$this->authorize('review', $product);
// ...
}
Комментарии:
1. Я думаю, что автор хочет разрешить просматривать продукт только тому пользователю, который купил его.
2. братан, верни $user->id = = = $review->>идентификатор пользователя; ? Я хочу, чтобы пользователь, купивший продукт, мог просмотреть его. (Невозможно просмотреть, если пользователь не купил его.) итак, каков запрос для этого? $user->id === [пользователи, которые приобрели этот продукт]. Очень благодарю вас за помощь мне.
3. @RoomalJayaratne Я только что отредактировал свой ответ. Дай мне знать, если ты это имеешь в виду.
4. Большое вам спасибо 🙂