【问题标题】:Laravel Eloquent complex whereLaravel Eloquent 复杂的地方
【发布时间】:2018-09-20 09:31:43
【问题描述】:

如何将此代码转换为 Laravel (Eloquent):

$query = 'SELECT * FROM posts p WHERE (p.is_public = 1)';

if (isset($date)){ //$date format is '2018-09-01 00:00:00'
    $query .= ' AND (p.created_at > "'.$date.'")';
}

if (isset($search)){
    $query .= ' AND ((p.title LIKE "%'.$search.'%") OR (p.body LIKE "%'.$search.'%"))';
}

【问题讨论】:

  • 我们可以看看你已经尝试过什么吗?谢谢
  • 所有答案都可以在这里找到:laravel.com/docs/5.7/eloquent。尝试自己先解决它,然后,如果它仍然不起作用,请询问并向我们展示您到目前为止做了什么以及到底什么不起作用。
  • 分享你的尝试?
  • $query = DB::table('posts AS p') ->where('p.is_public',1); if (isset($date)){ $query->where('p.created_at', '>', $date)); } if (isset($search)){ $search = '%'.$search.'%'; $query->where('p.title', 'like', $search) ->orWhere('p.body', 'like', $search) }

标签: php sql laravel eloquent


【解决方案1】:

试试这个:

假设 Post 是你的模型

$posts = Post::where('is_public', 1);
if (isset($date)) { 
    $posts->where('created_at', '>', $date);
}
if (isset($search)) {
    $posts->where(function($query) use ($search) {
                 $query->where('title', 'like', "%'.$search.'%")
                  ->orWhere('body', 'like', "%'.$search.'%");
             });
}
$posts = $posts->get();

【讨论】:

    【解决方案2】:

    这是示例代码:假设 Post 是您的模型

    $getPosts=Post::query()->where('is_public',1);
    
    $getPosts->when(isset($date),function($q) use ($date){
        $q->where('created_at','>',$date);
     });
    
    $getPosts->when(isset($search),function($q) use ($search){
        $q->where('title','like','%'.$search.'%');
        $q->orWhere('body','like','%'.$search.'%');
     });
    $posts=$getPosts->get();
    

    【讨论】:

      【解决方案3】:

      你应该试试这个:

      $query = Post::where('is_public', '1');
      
      if (isset($date)){ //$date format is '2018-09-01 00:00:00'
          $query->where('created_at', '>', $date);
      }
      
      if (isset($search)){
          $query->whereRaw('title LIKE "%'.$search.'%" OR body LIKE "%'.$search.'%"');
      }
      
      $posts = $query->get();
      

      【讨论】:

        猜你喜欢
        • 2015-12-06
        • 2021-11-16
        • 2014-08-18
        • 1970-01-01
        • 2019-05-19
        • 2020-01-12
        • 2015-05-16
        • 2021-02-02
        • 2013-05-30
        相关资源
        最近更新 更多