使用多个条件将 mySQL 查询转换为 Laravel 5
Converting mySQL query to Laravel 5 with multiple conditions
我有这种 mySQL 查询。我正在使用它来搜索license_id,电子邮件(用户),machine_id
SELECT license.license_id, license.instances, license.expiry_date,license.license_type, users.email
FROM license
INNER JOIN purchase_items ON purchase_items.license_id = license.license_id
INNER JOIN customer_purchases ON customer_purchases.customer_purchase_id = purchase_items.customer_purchase_id
INNER JOIN users ON users.user_id = customer_purchases.customer_id
INNER JOIN machines ON machines.license_id = license.license_id
WHERE customer_purchases.status = 1
AND license.license_id LIKE '%9fe%'
OR users.email LIKE 'hora%'
OR machines.machine_id LIKE '%dfd3%'
GROUP BY license.license_id
这里我开始写这个 Laravel 5 像这样
$key = $request->search_key;
if(($request->session()->get('user'))!=null){
$license_data = License::join('purchase_items','license.license_id','=','purchase_items.license_id')
->join('customer_purchases','customer_purchases.customer_purchase_id','=','purchase_items.customer_purchase_id')
->join('users','users.user_id','=','customer_purchases.customer_id')
->where('customer_purchases.status','=',1)
//some more codes
->groupBy('license.license_id')
->select('license.license_id',
'license.expiry_date',
'license.instances',
'users.email',
'license.license_type',
'license.is_valid')
->paginate(10);
我不明白如何使用多个条件。
($key 表示搜索关键字与 url 一起出现)
您可以使用 "orWhere" 条件。
https://laravel.com/docs/5.1/queries#where-clauses
例如:
如果 $key 是数组并且包含 licence_id,email 和 machine_id,
那么查询是
$license_data = License::join('purchase_items','license.license_id','=','purchase_items.license_id')->join('customer_purchases','customer_purchases.customer_purchase_id','=','purchase_items.customer_purchase_id')->join('users','users.user_id','=','customer_purchases.customer_id')->where('customer_purchases.status','=',1)->orwhere('license.license_id','LIKE',$key['licence_id'])->orwhere('users.email','LIKE',$key['email'])->orwhere('machines.machine_id','LIKE',$key['machine_id'])->groupBy('license.license_id') ->select('license.license_id', 'license.expiry_date', 'license.instances','users.email', 'license.license_type',license.is_valid')->paginate(10);
使用
$license_data = License::join('purchase_items','license.license_id','=','purchase_items.license_id')->join('customer_purchases','customer_purchases.customer_purchase_id','=','purchase_items.customer_purchase_id')->join('users','users.user_id','=','customer_purchases.customer_id')->where('customer_purchases.status','=',1)->orwhere('license.license_id','LIKE',$key)->orwhere('users.email','LIKE',$key)->orwhere('machines.machine_id','LIKE',$key)->groupBy('license.license_id') ->select('license.license_id', 'license.expiry_date', 'license.instances','users.email', 'license.license_type',license.is_valid')->paginate(10);
我有这种 mySQL 查询。我正在使用它来搜索license_id,电子邮件(用户),machine_id
SELECT license.license_id, license.instances, license.expiry_date,license.license_type, users.email
FROM license
INNER JOIN purchase_items ON purchase_items.license_id = license.license_id
INNER JOIN customer_purchases ON customer_purchases.customer_purchase_id = purchase_items.customer_purchase_id
INNER JOIN users ON users.user_id = customer_purchases.customer_id
INNER JOIN machines ON machines.license_id = license.license_id
WHERE customer_purchases.status = 1
AND license.license_id LIKE '%9fe%'
OR users.email LIKE 'hora%'
OR machines.machine_id LIKE '%dfd3%'
GROUP BY license.license_id
这里我开始写这个 Laravel 5 像这样
$key = $request->search_key;
if(($request->session()->get('user'))!=null){
$license_data = License::join('purchase_items','license.license_id','=','purchase_items.license_id')
->join('customer_purchases','customer_purchases.customer_purchase_id','=','purchase_items.customer_purchase_id')
->join('users','users.user_id','=','customer_purchases.customer_id')
->where('customer_purchases.status','=',1)
//some more codes
->groupBy('license.license_id')
->select('license.license_id',
'license.expiry_date',
'license.instances',
'users.email',
'license.license_type',
'license.is_valid')
->paginate(10);
我不明白如何使用多个条件。
($key 表示搜索关键字与 url 一起出现)
您可以使用 "orWhere" 条件。 https://laravel.com/docs/5.1/queries#where-clauses
例如:
如果 $key 是数组并且包含 licence_id,email 和 machine_id, 那么查询是
$license_data = License::join('purchase_items','license.license_id','=','purchase_items.license_id')->join('customer_purchases','customer_purchases.customer_purchase_id','=','purchase_items.customer_purchase_id')->join('users','users.user_id','=','customer_purchases.customer_id')->where('customer_purchases.status','=',1)->orwhere('license.license_id','LIKE',$key['licence_id'])->orwhere('users.email','LIKE',$key['email'])->orwhere('machines.machine_id','LIKE',$key['machine_id'])->groupBy('license.license_id') ->select('license.license_id', 'license.expiry_date', 'license.instances','users.email', 'license.license_type',license.is_valid')->paginate(10);
使用
$license_data = License::join('purchase_items','license.license_id','=','purchase_items.license_id')->join('customer_purchases','customer_purchases.customer_purchase_id','=','purchase_items.customer_purchase_id')->join('users','users.user_id','=','customer_purchases.customer_id')->where('customer_purchases.status','=',1)->orwhere('license.license_id','LIKE',$key)->orwhere('users.email','LIKE',$key)->orwhere('machines.machine_id','LIKE',$key)->groupBy('license.license_id') ->select('license.license_id', 'license.expiry_date', 'license.instances','users.email', 'license.license_type',license.is_valid')->paginate(10);