Как удалить товары, но не заказы, связанные с этим товаром в Laravel? - PullRequest
1 голос
/ 10 июля 2019

Я бы хотел, чтобы продавец мог удалить / отредактировать товар, который он перечислил. Но если этот продукт был заказан клиентом, я бы хотел, чтобы заказ остался прежним и не изменился. Как я могу сделать это?

Прямо сейчас, когда я обновляю / удаляю, это влияет на заказы, представленные ранее. Вот как я удаляю продукты прямо сейчас.

public function destroy($id) 
{ 
    $userId = Auth::user()->id; 
    $deleteData=product::where('seller_id', $userId)->findOrFail($id); 
    $deleteData->delete(); 

    return redirect()->back(); 
}

Order.php

public function user()
{
    return $this->belongsTo('App\User', 'seller_id');
}

public function products()
{
    return $this->belongsToMany('App\Product')->withPivot('quantity','total','Subtotal');
}

public function orderItems()
{
    return $this->hasMany('App\OrderProduct');
}

Edit:

Controller for seller orders

// Seller Orders 
 public function viewOrders(User $user)
 {
 //$seller = Auth::user();
 $totals = OrderProduct::select("seller_id", DB::Raw("SUM(Subtotal) AS  total"), 'order_id')
 ->where('seller_id', '=',  \Auth::user()->id)
 ->groupBy('seller_id')
 ->groupBy('order_id')
 ->get();


 $orders = Order::whereHas('orderItems.product', function ($query) {
    $query->where('seller_id', '=',  \Auth::user()->id);
 })->orderBy('id', 'DESC')->withTrashed()->get();
 return view('orders', ['orders'=> $orders, 'total'=> $totals] );
 }

Шаблон лезвия продавца

@foreach ($order->orderItems as $item)
@if($item->product->user_id == Auth::user()->id)

   <td>{{ $item->name }}</td>
   <td>{{ $item->price }}</td>
@else
  @endif
 @endforeach

OrderProduct.php

 class OrderProduct extends Model
{
use SoftDeletes;
protected $table = 'order_product';
protected $fillable = ['order_id', 'seller_id','product_id', 'quantity','Subtotal','total','name','price'];


public function product()
{
    return $this->belongsTo('App\Product');
}

1 Ответ

1 голос
/ 11 июля 2019

Добавьте черту SoftDeletes к вашей модели продукта.

Чтобы получить продукты, включая те, которые были удалены, используйте это:


<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class OrderProduct extends Model
{
    protected $table = 'order_product';
    protected $fillable = ['order_id', 'seller_id','product_id', 'quantity','Subtotal','total'];


    public function product()
    {
        return $this->belongsTo('App\Product')->withTrashed();
    }

}

Если вы не хотите показывать удаленные продукты, вы можете добавить ->whereNull('p.deleted_at') к функции, где вы извлекаете свои продукты:

$products = DB::table('recommends AS r')
            ->leftJoin('products AS p', 'r.product_id', '=', 'p.id')
            ->join('products_photos AS pp', 'pp.product_id', '=', 'p.id')
            ->whereNull('p.deleted_at')
            ->select('p.id', 'p.pro_name', 'filename', 'p.pro_price', 'pro_info', DB::raw('COUNT(*) AS total'))
            ->groupBy('p.id', 'p.pro_name', 'filename', 'p.pro_price', 'pro_info')
            ->orderby('total', 'DESC')
            ->take(4);

Это должно решить ваши проблемы.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...