如何创建与标准位置的hasMany自我关系?
例如,这就是我想要做的事情:class Payment extends \Illuminate\Database\Eloquent\Model {
public function refunds() {
return $this->hasMany(self::class, 'transaction_id', 'transaction_id')
->where('this.method','=','that.method')
->where('that.amount','<',0);
}
}
但我不知道如何给表提供两个不同的别名,以便我可以设置WHERE标准。
N.B。在我的例子中,“退款”只是一种负面付款。它们都具有相同的交易ID和方法。
答案 0 :(得分:0)
如何构建自己的HasMany
课程?
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Model;
class Payment extends Model
{
public function refunds() {
$fKey = 'transaction_id';
$instance = new static;
$instance = $instance->newQuery()
->where('this.method','=','that.method')
->where('that.amount','<',0);
return new HasMany(
$instance, $this, $instance->getTable().'.'.$fKey, $fKey
);
}
}
答案 1 :(得分:0)
您可以将关系设置为正常并将条件设置为控制器
$user = User::with('Profile')->where('status', 1)->whereHas('Profile', function($q){
$q->where('gender', 'Male');
})->get();