75 lines
2.2 KiB
PHP
75 lines
2.2 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Author: ywxapp<admin@ywxapp.cn>
|
||
// +----------------------------------------------------------------------
|
||
namespace addon\wxchat\controller\api;
|
||
// app/controller/Search.php
|
||
|
||
use app\model\Message;
|
||
use think\Request;
|
||
|
||
use ywxapp\controller\FrontendBase as AddonController;
|
||
|
||
/**
|
||
* Search 类
|
||
*
|
||
* @author ywxapp <admin@ywxapp.cn>
|
||
*/
|
||
class Search extends AddonController
|
||
{
|
||
|
||
/**
|
||
* Summary of noNeedLogin
|
||
* @var array
|
||
*/
|
||
protected $noNeedLogin = ['*'];
|
||
|
||
/**
|
||
* Summary of noNeedVerify
|
||
* @var array
|
||
*/
|
||
protected $noNeedVerify = ['*'];
|
||
|
||
/**
|
||
* 控制器初始化 initialize
|
||
* @return void
|
||
*/
|
||
protected function initialize()
|
||
{}
|
||
|
||
|
||
public function index(Request $request)
|
||
{
|
||
$userId = $request->user->id;
|
||
$keyword = $request->get('keyword');
|
||
$contactId = $request->get('contact_id');
|
||
$isGroup = $request->get('is_group', 0);
|
||
|
||
$query = Message::where(function($q) use ($userId, $contactId, $isGroup) {
|
||
if ($isGroup) {
|
||
$q->where('receiver_type', 1)->where('receiver_id', $contactId);
|
||
} else {
|
||
$q->where(function($q) use ($userId, $contactId) {
|
||
$q->where('sender_id', $contactId)->where('receiver_id', $userId);
|
||
})->whereOr(function($q) use ($userId, $contactId) {
|
||
$q->where('sender_id', $userId)->where('receiver_id', $contactId);
|
||
});
|
||
}
|
||
});
|
||
|
||
// 全文搜索(MySQL 5.7+)
|
||
if (extension_loaded('mysqlnd')) {
|
||
$query->whereRaw("MATCH(content) AGAINST(?)", [$keyword]);
|
||
} else {
|
||
$query->where('content', 'like', "%{$keyword}%");
|
||
}
|
||
|
||
$messages = $query->order('create_at', 'desc')->limit(20)->select();
|
||
return json(['code' => 200, 'data' => $messages]);
|
||
}
|
||
}
|