Laravel有很多自我的标准吗?

时间:2017-02-06 03:24:23

标签: php laravel laravel-5.2

如何创建与标准位置的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和方法。

2 个答案:

答案 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();