Я хочу получить все ваучеры, у которых есть хотя бы один ребенок, ваучер может иметь несколько ваучерных детей, но в любом ваучере может быть только один родитель.
Я установил его со следующими моделями и вызовами, и запрос, который он генерирует, по желанию, пока эта часть не будет: '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 больше не будет, только исправления безопасности еще на месяц.