簡體   English   中英

Laravel關系計數()

[英]Laravel relationship count()

我希望得到一個有關系的總用戶事務(特定用戶)。 我已經做到了,但我很好奇,我的方式是好方法。

//User Model
public function Transaction()
{
    return $this->hasMany(Transaction::class);
}

//Merchant Model

public function Transaction()
{
    return $this->hasMany(Transaction::class);
}

public function countTransaction()
{
    return $this->hasOne(Transaction::class)
        ->where('user_id', Request::get('user_id'))
        ->groupBy('merchant_id');
}

public function getCountTransactionAttribute()
{
    if ($this->relationLoaded('countTransaction'))
        $this->load('countTransaction');

    $related = $this->getRelation('countTransaction');

    return ($related) ? (int)$related->total_transaction : 0;
}

//controller

$merchant = Merchant::with('countTransaction')->get();

令我好奇的是countTransaction部分countTransaction 我把where where('user_id', Request::get('user_id'))直接放在模型中。

是獲得特定方式的好方法還是其他任何方式?

預期結果:

"merchant:"{
    "name": "example"
    "username" : "example"
    "transactions": {
        "count_transactions: "4" //4 came from a specific user.
    }
}

我需要獲取特定用戶的交易計數的商家數據。 此查詢基於登錄用戶。 因此,當user訪問商家頁面時,他們可以看到該商家的交易計數。

謝謝。

您確實希望將請求數據保留在模型之外(而不是選擇將其傳入)。 我也有點困惑為什么你有兩個'hasOne'用於交易,而'hasMany'用於商家模型中的交易。

我可能會更像下面的問題(未經測試,但沿着這些方向)。 我不再完全確定我理解你需要什么,但是沿着這些方向

    // Merchant Model
    public function transactions()
    {
        return $this->hasMany(Transaction::class);
    }

    public function countTransactionsByUser($userId)
    {
        return $this
                ->transactions()
                ->where('user_id', $userId)
                ->get()
                ->pluck('total_transaction')
                ->sum();
    }

    // Controller

    $userId = request()->get('user_id');

    // ::all() or however you want to reduce 
    // down the Merchant collection
    //
    $merchants = Merchant::all()->map(function($item, $key) {
        $_item = $item->getAttributes();
        $_item['transactions'] = [
            'count_transactions' => $item->countTransactionsByUser($userId);
        ];
        return $_item;
    });

    // Single total
    // Find merchant 2, and then get the total transactions 
    // for user 2
    //
    $singleTotal = Merchant::find(2)
        ->countTransactionsByUser($userId); 

暫無
暫無

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

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