簡體   English   中英

Eloquent Laravel 從多個表中獲取數據

[英]Eloquent Laravel Fetch Data from multiple tables

我花了兩天時間試圖解決這個問題,但我不知道如何解決。

我有五張桌子

  • 產品
  • 類別
  • 類別_產品
  • 命令
  • 訂購_產品

從視圖中,單擊類別按鈕我必須獲取他訂購的所有具有相關類別的產品。

我有當前的模型:

產品 Model

class Product extends Model
{
    public function categories() {
        return $this->belongsToMany('App\Category');
    }

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

類別 Model

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

訂購 Model

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

現在的問題是我不知道如何從當前表中獲取數據。當我按下按鈕時,我能夠從Product表中獲取類別,但我想從Ordered_Products中獲取。 我實在想不通怎么做。

有了這個,我可以從 Product 中獲取所有類別

if (request()->category) {
    $products = Product::with('categories')->whereHas('categories', function ($query) {
        $query->where('slug', request()->category);
    })->get();
}

相反,我可以獲取訂購的產品。

$products = DB::table('order_product')
    ->join('products', 'order_product.product_id','=', 'products.id')
    ->where('order_product.user_id','=',$user_id)
    ->get();

對於后者,有更好的方法來做到這一點,這是肯定的。 如果這是一個愚蠢的問題,我很抱歉,但我對這個框架相當陌生。 我正在使用 Laravel 7.2。

基本上 Eloquent Model 不鼓勵加入表來檢索數據。 它應該僅用於過濾結果(因此您需要使用->select('original_table.*')刪除其他表的字段)

在這種情況下,您應該首先簡單地檢索categories 然后使用關系屬性訪問檢索相關數據。

例如

$categories = Category::query()
    ->with('products')
    ->where('slug', request('category'))
    ->get();
$products = $categories->flatMap->products;
$pivots = $products->map->pivot;

使用 whereHas 解決了兩次:

$products = Product::with('categories')->whereHas('categories',function($query){
                $query->where('slug',request()->category);
            })->whereHas('orders',function($query){
                $query->where('orders.user_id',Auth::id());
            })->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM