首页 > 解决方案 > 如何在 Pivot 模型上应用范围?

问题描述

我有一个问题。基本上,我有一个模型“Affiliation”,它通过 Pivot CandidateAffiliation 与候选人具有一对多的关系。在 上belongsToMany,我想应用一些范围来帮助我稍后进行一些计算。

但是,当我调用范围时,我收到此错误:Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsToMany::paymentAvailable().

我觉得有办法做到这一点,但我似乎无法让它工作......

<?php

namespace App;

class Candidate extends Model
{
    public function affiliation() {
        return $this->belongsTo('App\Affiliation', 'candidate_invited_by');
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Affiliation extends Model
{
    public function user() {
        return $this->belongsTo('App\User');
    }

    public function candidates() {
        return $this->hasMany('App\Candidate', 'candidate_invited_by');
    }

    public function hirees() {
        return $this->belongsToMany('App\Candidate', 'affiliation_candidate')->withTimestamps()->using('App\AffiliationCandidate')->withPivot(['paid', 'cancelled']);
    }
}
<?php

namespace App;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Relations\Pivot;

class AffiliationCandidate extends Pivot
{
    public function getStatusAttribute() {
        if($this->paid == true) {
            return 'payé';
        } elseif($this->cancelled == true) {
            return 'annulé';
        } elseif($this->created_at < Carbon::now()->subDays(7)) {
            return 'en attente de paiement';
        } else {
            return 'en attente de validation (délai de 7 jours)';
        }
    }

    public function scopePaymentAvailable($query) {
        return $query->where('created_at', '<', Carbon::now()->subDays(7));
    }

    public function scopeNotPaid($query) {
        return $this->paymentAvailable()->where('paid', false);
    }

    public function scopePaid($query) {
        return $this->paymentAvailable()->where('paid', true);
    }
}
                <li>Nom complet: {{ $affiliation->user->candidate->full_name }}</li>
                <li>Email: {{ $affiliation->user->email }}</li>
                <li>Date d'inscription: {{ $affiliation->user->created_at->toDateString() }}</li>
                <li>Nombre de clics: {{ $affiliation->visits }}</li>
                <li>Nombre d'inscrit: {{ $affiliation->candidates()->count() }}</li>
                <li>Nombre d'embauchés: {{ $affiliation->hirees()->count() }}</li>
                <li>Montant total: {{ $affiliation->hirees()->paymentAvailable()->count() * 25 }}</li>
                <li>Montant disponible: {{ $affiliation->hirees()->notPaid()->count() * 25 }}</li>
                <li>Montant retiré: {{ $affiliation->hirees()->paid()->count() * 25 }}</li>

标签: phplaraveleloquent

解决方案


你可以尝试在你的belongsToMany关系中使用wherePivot()


推荐阅读