Laravel parent/children 自己模型上的关系

Laravel parent/children relationship on it's own model

我要获取所有至少有一张child的代金券,一张代金券可以有多张代金券children,但任何代金券只能有一张parent。

我使用以下模型和调用对其进行设置,并且它生成的查询符合要求,直到这一部分:'vouchers'.'parent_id' = 'vouchers'.'id'

需要的功能:

$vouchers = Voucher::has('children')->get();

$vouchers = Voucher::has('parent')->get();

结果查询

select * from `vouchers` where `vouchers`.`deleted_at` is null 
and (select count(*) from `vouchers` where `vouchers`.`deleted_at` is null 
and `vouchers`.`parent_id` = `vouchers`.`id` 
and `vouchers`.`deleted_at` is null ) >= 1

型号:

class Voucher extends baseModel {

    public function parent()
    {
        return $this->belongsTo('Voucher', 'parent_id');
        // return $this->belongsTo('Voucher', 'parent_id', 'id'); <- attempted but din't work
    }

    public function children()
    {
        return $this->hasMany('Voucher', 'parent_id');
    }
}

此问题已在 5.0 中报告并修复https://github.com/laravel/framework/pull/8193

遗憾的是,版本 4 没有后向端口。

但是,如果您想自己应用修复程序,您可以在此处查看修改列表:https://github.com/laravel/framework/pull/8193/files

请注意,修改框架的代码库存在风险,但 Laravel 4.x 版本将不再修复错误,只会再进行几个月的安全修复。