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

<?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 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 6
firmgoal

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

试试吧

1年前 评论
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'));

}

1年前 评论
firmgoal

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

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

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);
这样写却又生效了,不知道什么原因

11个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会