Laravel 4.2:将软删除的项添加到whereHas condition

时间:2015-06-08 14:39:44

标签: laravel-4

我在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请求优雅的解决方案? 提前感谢您的建议!

1 个答案:

答案 0 :(得分:3)

对此的一个解决方案是创建包含已删除记录的关系的替代形式。

public function dspsTrashed() {
  return $this->hasWhatever()->withTrashed();
}

然后:

$this->model->whereHas('dspsTrashed', ...);