我在Laravel 4.2上遇到了一个问题,但我的Google朋友找不到任何解决方案: 我希望在whereHas条件下获取所有软删除的项目,它根本不起作用......
以下是代码:
$res = $this->model->whereHas('dsps', function ($q) use ($dsp_id) {
$q->where('dsps.id', $dsp_id);
$q->withTrashed();
})->get();
我得到以下SQL请求:
select * from `bdc` where (select count(*) from `dsps` inner join `bdc_dsp` on `dsps`.`id` = `bdc_dsp`.`dsp_id` where `bdc_dsp`.`bdc_id` = `bdc`.`id` and `dsps`.`id` = 81 and `dsps`.`deleted_at` is null) >= 1;
问题显然是" deleted_at为空"遗迹。它应该通过使用withTrashed()方法消失。
我试着像这样使用withTrashed():
$q->where('dsps.id', $sst_dsp)->withTrashed();
它并没有改变任何东西。
怎么能让" deleted_at为空"条件来自我的whereHas请求优雅的解决方案? 提前感谢您的建议!
答案 0 :(得分:3)
对此的一个解决方案是创建包含已删除记录的关系的替代形式。
public function dspsTrashed() {
return $this->hasWhatever()->withTrashed();
}
然后:
$this->model->whereHas('dspsTrashed', ...);