Laravel 自带 Eloquent 如何实现 用 Bootstrap table 输出 MySQL 表进行排序?

最近用laravel 有个小问题急需大家解答,楼主小白,如果问的弱智一些,希望大家容忍。

项目名称:sample
数据表名称:yao
file

sample/route/web.php
file

sample/app/Models/Sales.php
file
sample/app/Http/Controllers/SalesController.php
file

sample/resources/views/static_pages/table_pos.blade.php
file

我的问题:我想对这个表进行筛选,比如我在这个下拉菜单选择数据表中一列,如何写方法可以让table
自动按照筛选条件输出(比如Sortby Pos asc)
file

第一次提问,希望我阐述的比较清楚,刚刚上手laravel ,求各位大神赐教,万分感谢!!!

Alpha在巴黎
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
KayuHo
最佳答案

@Alpha94511 一步步断点调试看看哪里出了问题,导致空白页

6年前 评论
讨论数量: 18

数据表是mysql里已经有的,不是通过迁移生成的

6年前 评论
KayuHo

可以在路由后加个可选参数

Route::get('/pos/{sort_by?}', 'SalesController@showtable')->name('saleorg');

传入参数到控制器中接受这个参数,再进行判断用户要按哪个字段进行排序


public function showtable ($sort_by = 'id') 
{
    $sales = Sales::orderBy($sort_by, 'asc')->paginate(15);
    return view('static_pages/table_post', compact('sales'));
}
6年前 评论

@Joy_he 还想麻烦问你一下,我现在实现完排序后是以下界面,我想实现一个模糊搜索的功能,比如我这里有一些输入框,我不知道如何能通过点击按钮获得输入框里的值赋给变量,然后再在SalesController里创建一个方法实现我想要的查询,比如我在Pos里输入a 点击按钮后实现类似sql的查询: select from yao where pos like '%a%'; 如果在pos里输入a,town里输出b
实现类似: select
from yao where pos like '%a%' and town like' %b%'; 如果没有输入值就没变化即可。
我没有解决的问题是:1 如何通过点击按钮获取这几个输入框中的值 2 如何用Eloquent在SalesController里实现查询方法

file

实现输入框的blade.php代码

file
自己查了一天,都没有成功。。求大家帮助!!

6年前 评论
lmaster

@Alpha94511 兄弟,你后面的问题,你先的弄明白html中form的作用。当然前后端沟通(用词可能不准确,你明白就好)放法不一定就是form表单,但是这个是基础,看了下你的html中没form,如果没有js之类的配合你点击按钮是不会有任何效果的。建议html、css、js、php、mysql一起学下(前三个了解就可以)

6年前 评论
lmaster

@Alpha94511 还有就是,浏览器我们程序员可以用f12的,我的极速360截图

file
你可以百度一波,谷歌浏览器调试模式,你会打开新天地,还有兄弟你是自学么?

6年前 评论
KayuHo

@Alpha94511

你这个都没有 form 表单啊,你这也太小白了吧,建议花点时间把基础补一下

至于你这个搜索的需求可以这样做

改下路由

Route::match(['get', 'post'], '/pos/{sort_by?}', 'SalesController@showtable')->name('saleorg'); // 让路由可以识别 get 和 post 请求

HTML 页面

<form action="{{ route('saleorg') }}" method="post">
    {{ csrf_field() }}
    <!-- 你自己的表单内容 -->
   <lable>Pos</label>
   <input type="text" name="pos" class="form-control" value="{{ old('pos') }}">
   .
   .
   .
</form>

控制器文件中还是原来的方法

public function showtable (Request $request, $sort_by = 'id')
{
    $where = [];
    if ($request->has('pos')) {
       $where[] = ['pos', 'like', '%'.$request->post.'%']; 
    }

   if ($request->has('town')) {
       $where[] = ['town', 'like', '%'.$request->town.'%']; 
    }

   .
   .
   .
    // 以此类推

    $sales = Sales::where(where)->orderBy($sort_by, 'asc')->paginate(15);
    return view('static_pages/table_post', compact('sales'))->withInput();
}

可能我的方法比较笨,如果你找到更好的办法可以去改进,希望可以帮到你

6年前 评论

@lmaster 兄弟多谢你的解答,我的确是没有php 和 js 任何经验就开始上手的,我先补补课~

6年前 评论

@lmaster 我知道这个,用来调试css来的,我先去补课,是真 0基础起步

6年前 评论

@Joy_he
我已经补课回来了,这个排序方法还请指点一下,我已经实现了添加,修改,删除的功能,了解了表单的使用,但是你说的
这个排序,我不知道如何在下拉菜单里写url或者route,试了很多次还是错误

现在界面(图一):
file

route/web.php

file

SalesController.php return的pos_table就是正常界面的路由,图一)

file

下拉菜单的代码:我想给sort_by赋值,通过点击下拉菜单的选项,比如点击pos,实现让sort_by=pos,然后回到SalesController
里面去排序,但是这个链接和传参怎么也写不对。。。求指导

file

6年前 评论
KayuHo
<li><a href="{{ route('pos_order', ['sort_by' => 'pos']) }}">Pos</a></li>
<li><a href="{{ route('pos_order', ['sort_by' => 'town']) }}">Town</a></li>

试试这样行不行,出现什么错,最好把报错信息也贴出来嘛

6年前 评论

@Joy_he 没有错误。 现在通过点击下拉菜单的确能给sort_by赋值。。。。但是找不到路由
点击完下拉菜单(sample/test为homestead注册的地址):
file

下拉菜单:

file

SalesController:

file

6年前 评论
KayuHo

看看 log 日志有没有报什么错

6年前 评论

@Joy_he 日志没有报错,可能是什么原因呢。。。传参也传对了,我Controller 绑定的视图那边没问题啊

6年前 评论
KayuHo

@Alpha94511 一步步断点调试看看哪里出了问题,导致空白页

6年前 评论

@Joy_he 好的,我先去试试,多谢

6年前 评论

@Joy_he

解决了,多谢 。我发现问题出在哪里了,我的一个reource 路由定义的是/pos_table
实现排序和搜索的路由也定义的/pos_table/{sort_by?} 我尝试的时候把排序的路由改成/pos/{sort_by?}就行了,我不知道这是为什么,求解释。多谢你这几次回复!感激不尽!

![Uploading file...]()

6年前 评论
KayuHo

@Alpha94511 Laravel 的路由机制好像以写在前面的为准,这个我也不太确定,可以查看一下相关的文档看看能不能找到答案

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!