【问题标题】:Laravel Eloquent query for join with likeLaravel Eloquent 查询加入 like
【发布时间】:2018-03-17 18:09:31
【问题描述】:

我有这个原始查询,但我正在努力将其转换为雄辩的。下面是我的原始 sql。我不能使用 DB:select 因为我在最后使用分页。

select * from orders
join users on orders.user_id = users.id
where orders.id = $search
or orders.reference_no like '%$search%'
or users.name like '%$search%'

public function customer()
{
return $this->belongsTo('App\User', 'user_id', 'id');
}

 $orders = Order::where('reference_no', 'LIKE', "%$search%")
            ->orWhere('reference_no',$search)
            ->orWhere('id',$search)
            ->whereHas('customer', function ($query) use ($search) {
                $query->where('name', 'like', '%$search%');
            })
            ->paginate(10);

【问题讨论】:

  • 向我们展示您的模型以及您迄今为止尝试过的内容

标签: mysql laravel eloquent


【解决方案1】:

试试这个

$result = Order::select('orders.*')
       ->join('users', 'orders.user_id', '=', 'user.users.id')
       ->where(function($q) {
              $q->where('orders.id', $search)
                ->orWhere('orders.reference_no', 'like', "%$search%")
                ->orWhere('users.name', 'like', "%$search%") ;
              })
        ->get();

【讨论】:

    【解决方案2】:

    感谢 Pavel 和 Unai。根据您的回答设法做到这一点。需要做一个“使用”并在我需要将“%”连接到实际的 $search 变量的地方。如果我没有 concat '.'文字搜索显示在查询中

                $orders = Order::select('orders.*')
                ->join('users', 'orders.user_id', '=', 'users.id')
                ->where(function($q) use ($search) {
                    $q->where('orders.id', $search)
                        ->orWhere('orders.reference_no', 'like', '%' . $search . '%')
                        ->orWhere('users.name', 'like', '%' . $search .'%') ;
                })
                ->paginate(10);
    

    【讨论】:

      【解决方案3】:

      试试这个

         $result = Order::select('orders.*')
                 ->join('users', 'orders.user_id', '=', 'user.users.id')
                 ->where(function($q) use ($search){
                        $q->where('orders.id', $search)
                          ->orWhere('orders.reference_no','like', '%$search%')
                          ->orWhere('users.name','like', '%$search%') ;
                        })
                  ->get();
      

      【讨论】:

        猜你喜欢
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-22
        • 1970-01-01
        • 2015-02-22
        • 2017-06-05
        相关资源
        最近更新 更多