【问题标题】:How can i find only deleted rows in Laravel?如何在 Laravel 中仅找到已删除的行?
【发布时间】:2020-07-02 19:15:06
【问题描述】:

我在我的项目中使用SoftDeletes,在数据库表中被识别为deleted_at,我想搜索并只查找已删除的行。

这是我的控制器代码

 public function trashedJobSearch(Request $request)
{
    $search = $request->get('search');
    $jobs = Jobs::select('id', 'company_name', 'position_name', 'job_description','deleted_at', 'created_at', 'expire_date', 'status')
        ->where(DB::raw('lower(company_name)'), 'like', '%' . mb_strtolower($search) . '%')
        ->orWhere(DB::raw('lower(position_name)'), 'like', '%' . mb_strtolower($search) . '%')
        ->where('deleted_at', '!=', null)
        ->paginate(10);

    return view('/trashed', compact('jobs'));
}

我尝试使用onlyTrashed(),但它也不起作用。

【问题讨论】:

  • 你能发布$search的值,以及被删除的记录吗?

标签: php laravel


【解决方案1】:

你可以试试这个。

在你的模型中-

use Illuminate\Database\Eloquent\SoftDeletes;

class ModelName extends Model
{
    use SoftDeletes;
}

只获取已删除的行

$search = $request->get('search');
$data = App\ModelName::onlyTrashed()
                ->where('id', $search)
                ->get();

【讨论】:

    【解决方案2】:

    你有orWhere,你需要使用groupingonlyTrashed

    Jobs::select('id', 'company_name', 'position_name', 'job_description','deleted_at', 'created_at', 'expire_date', 'status')
      ->where(function ($query) use ($search) {
            $query->where(DB::raw('lower(company_name)'), 'like', '%' . mb_strtolower($search) . '%')
                  ->orWhere(DB::raw('lower(position_name)'), 'like', '%' . mb_strtolower($search) . '%');
       })->onlyTrashed()
         ->paginate(10);
    

    【讨论】:

    • 对不起,我打错了,是 whereNotNull 而不是 whereNull
    • 它太不工作了(这个代码只在deleted_at为空的地方得到。但我需要deleted_at不为空的地方
    • 我看到了问题,因为你有一个 or 需要进行分组的地方,我已经更新了我的答案
    • 在我发现没有删除的行之前,但现在使用你的代码我什么也没找到))
    【解决方案3】:

    你可以使用 Model::onlyTrashed()->get();

    您是否已经在寻找这篇文章? How to get all rows (soft deleted too) from a table in Laravel?

    【讨论】:

    • 你试过->where(DB::raw('deleted_at IS NOT NULL')) 吗? @Rasimoghlu
    【解决方案4】:

    onlyTrashed() 方法应该适合您。 Docs 表示 Laravel 已删除条目。我见过添加原始选择语句的时候,虽然它搞砸了。

    selectDB::raw 取出多余的位,然后在您拥有所需的内容后添加它们。从最简单的开始:

    $testOfDeletedOnlyJobs = Jobs::onlyTrashed()->get();
    

    从这里,添加查询的其他部分以查看失败的位置和原因。如果上面没有给你任何东西,也许没有删除记录?

    【讨论】:

    • 我只需要在搜索时删除行。我知道 onlyTrashed() 正在工作,但当我只搜索已删除的行时它不起作用
    • 我会用简单的方法来做——我会像上面那样拉入已删除的行,然后对 collection 进行排序。你知道 onlyTrashed() 有效,获取所有记录并使用 Laravel 搜索集合而不是数据库。 (如果这不是一个太大的数据集)
    • 你只是缺少分组,检查我的答案
    • 我有另一个页面,我只收集我删除的行。但是当我试图在我的垃圾页面中搜索时,那里只显示没有垃圾的行。
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 2011-10-05
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2012-04-01
    • 2018-04-18
    相关资源
    最近更新 更多