我要获取至少有一个子节点的所有代金券,一张代金券可以有多个子节点,但任何代金券只能有一个父节点。
我用以下模型和调用设置了它,它生成的查询是所需的,直到这一部分:'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不会再修复错误。