1. 程式人生 > 其它 >laravel5 實現多表、多條件模糊查詢

laravel5 實現多表、多條件模糊查詢

控制器:

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\QueryException;
use App\Http\Requests\ShopRequest;
use App\Http\Requests\ShopEditRequest;
use App\Http\Controllers\Controller;
use App\Models\Member;
use App\Models\MembersCompany;
use App\Models\Countrys;
use App\Models\TimeZone;
use App\Models\Ticket;
use App\Models\ShopCategory;

class ShopController extends Controller
{

public function data(Request $request)
{
$ex_id = $request->get('ex_id', 0);
$q = $request->get('q', '');
$where[] = ['type', '=', 1];
$where[] = ['verify_status', '=', 1];

if ($ex_id)
$where[] = ['ex_id', '=', $ex_id];

$list = Member::query()->with([
'company' => function($query){
$query->select('id', 'member_id', 'title', 'logo', 'website', 'phone', 'address');
},
'exhibition' => function($query){
$query->select('id', 'title');
},
'ticket' => function($query){
$query->select('id', 'title');
}])
->whereHas('exhibition', function($query){
$query->where('is_deleted', '=', 0);
})
->where($where);

if ($q)
{
$where_search[] = ['title', 'like', '%' . $q . '%', 'or'];
$where_search[] = ['phone', 'like', '%' . $q . '%', 'or'];
$where_search[] = ['email', 'like', '%' . $q . '%', 'or'];

$list = $list->where(function($query) use ($where_search,$q){
$query->where($where_search)->orWhere(function($query) use ($q){
$query->whereHas('company', function($query) use ($q){
$query->where(array(['title', 'like', '%' . $q . '%', 'or'], ['phone', 'like', '%' . $q . '%', 'or']));
});
});
});
}

$list = $list->orderBy('id', 'desc')
->paginate($request->get('limit',30))
->toArray();

// 處理資料
foreach ($list['data'] as &$item)
{
$item['company_title'] = $item['company']['title'] ?? '';
$item['company_logo'] = $item['company']['logo'] ?? '';
$item['company_phone'] = $item['company']['phone'] ?? '';
$item['company_address'] = $item['company']['address'] ?? '';
$item['company_website'] = $item['company']['website'] ?? '';
$item['ex_title'] = $item['exhibition']['title'] ?? '';
$item['ticket_title'] = $item['ticket']['title'] ?? '';
unset($item['company']);
unset($item['exhibition']);
unset($item['ticket']);
}

return resJson([
'code' => 0,
'msg' => '正在請求中...',
'count' => $list['total'],
'data' => $list['data']
]);
}

}


model:

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;

class Member extends Authenticatable
{
protected $table = 'members';
protected $fillable = [
'ex_id',
'ticket_id',
'phone',
'title',
'title_en',
'avatar',
'email',
];

// 公司資訊
public function company()
{
return $this->hasOne('App\Models\MembersCompany', 'member_id', 'id');
}

// 展會資訊
public function exhibition()
{
return $this->belongsTo('App\Models\Exhibition', 'ex_id', 'id');
}


}