Laravel 怎么样用数组的方式构造一个多字段查询?
0

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Models\link;

class LinkController extends BaseController
{

public function index(Request $request) {

    $map = [];
    if ($request->has('search')) {
        $keywords = $request->keywords;

        $map = [
            ['class_key', 'like', '%' . $keywords . '%'],
            ['name', 'like', '%' . $keywords . '%']
        ]; 
    }

    $list = link::where($map)->paginate($this->paginate);
    return view('admin.link.index', compact('list'));

}

}

像这样的代码最终生成的是两个字段AND,我想改成OR,有办法吗?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6
firmgoal

$list = link::where(function ($query) {
$query->orWhere('class_ke', 'like', '%' . $keywords . '%')
->orWhere('name', 'like', '%' . $keywords . '%');
})->paginate($this->paginate);

试试吧

5个月前
firmgoal

public function index(Request $request)
{

if ($request->has('search')) {
    $map = function($query) use ($request->keywords) {
        $query->orWhere('class_ke', 'like', '%' . $keywords . '%')->orWhere('name', 'like', '%' . $keywords . '%');
    };
}
if (isset($map)) {
      $list = link::where($map)->paginate($this->paginate);
} else {
      $list = [];
}

return view('admin.link.index', compact('list'));

}

5个月前
firmgoal

写的还是不好,这评论的内容不能再次编辑 好蛋疼啊

5个月前

貌似这种情况用不了数组形式查询~~~~只能用orWhere,感觉确实不方便,我也想吐槽···哈哈···我是想用数组方式实现in查询,结果好像走不通····你要是有啥好方法记得分享一下哈··我也是刚用laravel不久

5个月前

<?php
namespace App\Models\traits;
use Illuminate\Support\Facades\Schema;

trait Sort
{
// 根据 URl 参数自动排序
protected function _sort($query, $key = '')
{
$columns = Schema::getColumnListing($this->getTable());
$options = [];
if(is_array($key)) {
$options = $key;
} else if(is_string($key) && !empty($key)) { // 字符串使用自定义格式用于URL,否则用数组
list($field, $value) = explode('-', $key);
if (in_array($value, ['desc', 'asc']) && in_array($field, $columns)) {
$options = [$field => $value];
}
}
$query->->orderBy($options[0], $options[1]);
}
}
换个思路 ,从这点来看,Laravel还真不如TP5的查询强大

5个月前

数组方式,是不是不支持啊?我也是这样写的,但是不起作用。最后只能用多个->where()去做的。感觉不爽。我记得tp这样写是没问题的。但是laravel好像不行。但是如果是查询的是时间
$mintime = strtotime($pre_arrive_time);
$maxtime = $mintime+86400;
$where[] = ['pre_arrive_time','>=',$mintime];
$where[] = ['pre_arrive_time','<',$maxtime];
$order_result->where($where);
这样写却又生效了,不知道什么原因

4个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!