php - 如何在 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>
解决方案
你可以尝试在你的belongsToMany
关系中使用wherePivot()
推荐阅读
- julia - 任何人都可以建议在 Julia 中纠正以下数组理解吗
- reactjs - useState 设置方法不立即反映更改(Stackoverflow 中建议的解决方案不起作用)
- java - Mockito 测试单独工作,但一起运行时只有一个工作
- python - 如何从 JavaScript 网页下载完整的 html?
- sql - 单表sql server中的匹配和解锁记录
- r - How do l extract all genes in gene_symbol into a new column that have the same start and end in r
- ios - 编程 UICollectionViewController 中的空白自定义集合单元格
- javascript - nabvar 的 Javascript 按钮不起作用
- docker - zull, eureka server, eureka service 和 docker
- r - 在R中查找几个没有标题的CSV