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

问答 深蓝色 ⋅ 于 1个月前 ⋅ 最后回复由 yuexiage 1周前 ⋅ 173 阅读

<?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,有办法吗?

本文章首发在 Laravel China 社区

abc

成为第一个点赞的人吧 :bowtie:
回复数量: 6
  • firmgoal 初级软件工程师
    1个月前

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

    试试吧

  • firmgoal 初级软件工程师
    1个月前

    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'));

    }

  • firmgoal 初级软件工程师
    1个月前

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

  • kevin2011
    1个月前

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

  • 深蓝色
    1个月前

    <?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的查询强大

  • yuexiage
    1周前

    数组方式,是不是不支持啊?我也是这样写的,但是不起作用。最后只能用多个->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);
    这样写却又生效了,不知道什么原因

暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档