【问题标题】:Laravel SoftDeletes still returns records used in joins even when deleted_at is not null?即使 deleted_at 不为空,Laravel SoftDeletes 仍会返回连接中使用的记录?
【发布时间】:2019-11-17 10:36:36
【问题描述】:

我正在查询一个模型,其中的连接已删除_at 不为空,但它们仍会在结果中返回。

例如:posts 表连接 post_likes 表,两者都使用软删除。

Posts::join(
   'post_likes',
   'post_id',
   '=',
   'id'
)->get();

【问题讨论】:

  • 如果您有Like 模型和likes 关系,则无需加入。你有什么理由不使用它们?您没有从post_likes 查询任何列,因此join 在这里似乎没有必要。
  • @TimLewis 我简化了我的问题以显示我面临的基本问题。我的代码更通用,它会根据 url 自动构建查询。
  • 加入往往会绕过很多 Eloquent 的内置功能。你应该利用关系。

标签: laravel eloquent


【解决方案1】:

我目前的解决方法是在连接中手动检查,但显然我更希望这是自动的

Posts::join(
   'post_likes',
   function ($join) use ($model) {
      $join->on(
         'post_id',
         '=',
         'id'
      );

      if ($model->hasColumn('deleted_at')) {
         $join->whereNull('post_likes.deleted_at');
      }
   }
);

【讨论】:

    猜你喜欢
    • 2017-05-14
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2018-08-04
    • 2020-05-22
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多