房源属性是对一个房源的信息的补充和描述,在日后的展示和数据调用检索中都有着重要的条件依据。

表的字段,结构

Schema::create('fangs', function (Blueprint $table) {$table->bigIncrements('id');$table->string('fang_name',100)->default('')->comment('房源名称');$table->string('fang_xiaoqu',100)->default('')->comment('房源小区名称');$table->unsignedInteger('fang_province')->default(0)->comment('省');$table->unsignedInteger('fang_city')->default(0)->comment('市');$table->unsignedInteger('fang_region')->default(0)->comment('区');$table->string('fang_addr',200)->default('')->comment('房源地址');$table->unsignedInteger('fang_direction')->default(0)->comment('房源朝向');$table->unsignedInteger('fang_build_area')->default(0)->comment('房源面积');$table->unsignedInteger('fang_using_area')->default(0)->comment('使用面积');$table->unsignedInteger('fang_year')->default(2000)->comment('建筑年代');$table->unsignedInteger('fang_rent')->default(0)->comment('租金');$table->unsignedTinyInteger('fang_floor')->default(1)->comment('楼层');$table->unsignedTinyInteger('fang_shi')->default(1)->comment('几室');$table->unsignedTinyInteger('fang_ting')->default(1)->comment('几厅');$table->unsignedTinyInteger('fang_wei')->default(1)->comment('几卫');$table->string('fang_pic',600)->default('')->comment('房屋图片');$table->unsignedInteger('fang_rent_class')->default(0)->comment('租赁方式');$table->string('fang_config',100)->default('')->comment('配套设施');$table->unsignedInteger('fang_area')->default(0)->comment('区域');$table->unsignedInteger('fang_rent_range')->default(0)->comment('租金范围');$table->unsignedInteger('fang_rent_type')->default(0)->comment('租期方式');$table->unsignedInteger('fang_status')->default(0)->comment('房源状态');$table->unsignedInteger('fang_owner')->default(0)->comment('业主');$table->string('fang_desn',500)->default('')->comment('房源描述');$table->text('fang_body')->comment('房源信息');$table->unsignedInteger('fang_group')->default(0)->comment('租房小组');$table->enum('is_recommend',['0','1'])->default('0')->comment('是否推荐:0否,1是');$table->decimal('latitude',10,4)->default(0)->comment('纬度');$table->decimal('longitude',10,4)->default(0)->comment('经度');$table->timestamps();// 软删除$table->softDeletes();});

表单

 public function index(){//获取数据//with  关联关系的作$data=Fang::with(['owner'])->get();//指向视图模板并赋值return  view('admin/fang/index',compact('data'));}

添加页面

//房东 属于关系public function owner() {return $this->belongsTo(FangOwner::class, 'fang_owner');}public static function getFangAttr(){//房源属性表$fangDirectionParentID=Fangattr::where('field_name','=','fang_direction')->value('id');$fang_direction = FangAttr::where('pid', '=', $fangDirectionParentID)->get();//租期方式$fangRentTypeParentID = FangAttr::where('field_name', '=', 'fang_rent_type')->value('id');$fang_rent_type = FangAttr::where('pid', '=', $fangRentTypeParentID)->get();//付款方式$fangRentClassParentID = FangAttr::where('field_name', '=', 'fang_rent_class')->value('id');$fang_rent_class = FangAttr::where('pid', '=', $fangRentClassParentID)->get();//配套设施$fangConfigParentID = FangAttr::where('field_name', '=', 'fang_config')->value('id');$fang_config = FangAttr::where('pid', '=', $fangConfigParentID)->get();//房东$fang_owner = FangOwner::get();//获取所有的城市(省)$cityData = City::where('pid', '=', '0')->get();$data = ['fang_direction'=>$fang_direction,'fang_rent_class'=>$fang_rent_class,'fang_rent_type'=>$fang_rent_type,'fang_owner'=>$fang_owner,'fang_config'=>$fang_config,'city_data'=>$cityData,];return $data;}
public function create(){//$data = Fang::getFangAttr();
//        print_r($data);return view('admin/fang/create',$data);}

表单页面

@extends('admin.common.main')@section('css'){{-- webuploader上传样式 --}}<link rel="stylesheet" type="text/css" href="/webuploader/webuploader.css"/>
@endsection@section('cnt')<nav class="breadcrumb"><i class="Hui-iconfont"></i> 首页<span class="c-gray en">&gt;</span> 房源管理<span class="c-gray en">&gt;</span> 添加房源<a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px"href="javascript:location.replace(location.href);" title="刷新"><i class="Hui-iconfont"></i></a></nav><article class="page-container">{{-- 表单验证提示 --}}@include('admin.common.validate')<form action="{{ url('admin/fang/store') }}" method="post" class="form form-horizontal" id="fang-add">@csrf<div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>房源名称:</label><div class="formControls col-xs-8 col-sm-9"><input type="text" class="input-text" name="fang_name"></div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>小区名称:</label><div class="formControls col-xs-8 col-sm-9"><input type="text" class="input-text" name="fang_xiaoqu"></div></div><div data-toggle="distpicker"><select name="fang_province" data-province="---- 选择省 ----"></select><select name="fang_city" data-city="---- 选择市 ----"></select><select name="fang_region" data-district="---- 选择区 ----"></select></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>租金:</label><div class="formControls col-xs-8 col-sm-9"><input type="number" class="input-text" style="width: 200px;" name="fang_rent"> 元</div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>楼层:</label><div class="formControls col-xs-8 col-sm-9"><input type="number" class="input-text" style="width: 200px;" name="fang_floor"></div></div>
{{--            <div class="row cl">--}}
{{--                <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>租期方式:</label>--}}
{{--                <div class="formControls col-xs-8 col-sm-9">--}}
{{--                    <select name="fang_rent_type" style="width: 200px;">--}}
{{--                        @foreach($fang_rent_type as $item)--}}
{{--                            <option value="{{ $item->id }}">{{ $item->name }}</option>--}}
{{--                        @endforeach--}}
{{--                    </select>--}}
{{--                </div>--}}
{{--            </div>--}}<div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>几室:</label><div class="formControls col-xs-8 col-sm-9"><input type="number" class="input-text" name="fang_shi" value="2"></div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>几厅:</label><div class="formControls col-xs-8 col-sm-9"><input type="number" class="input-text" name="fang_ting" value="1"></div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>几卫:</label><div class="formControls col-xs-8 col-sm-9"><input type="number" class="input-text" name="fang_wei" value="2"></div></div>
{{--            <div class="row cl">--}}
{{--                <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>朝向:</label>--}}
{{--                <div class="formControls col-xs-8 col-sm-9">--}}
{{--                    <select name="fang_direction" style="width: 200px;">--}}
{{--                        @foreach($fang_direction as $item)--}}
{{--                            <option value="{{ $item->id }}">{{ $item->name }}</option>--}}
{{--                        @endforeach--}}
{{--                    </select>--}}
{{--                </div>--}}
{{--            </div>--}}
{{--            <div class="row cl">--}}
{{--                <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>租赁方式:</label>--}}
{{--                <div class="formControls col-xs-8 col-sm-9">--}}
{{--                    <select name="fang_rent_class" style="width: 200px;">--}}
{{--                        @foreach($fang_rent_class as $item)--}}
{{--                            <option value="{{ $item->id }}">{{ $item->name }}</option>--}}
{{--                        @endforeach--}}
{{--                    </select>--}}
{{--                </div>--}}
{{--            </div>--}}<div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>建筑面积:</label><div class="formControls col-xs-8 col-sm-9"><input type="number" class="input-text" name="fang_build_area" value="120" style="width: 60px;">平米</div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>使用面积:</label><div class="formControls col-xs-8 col-sm-9"><input type="number" class="input-text" name="fang_using_area" value="105" style="width: 60px;">平米</div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>建筑年代:</label><div class="formControls col-xs-8 col-sm-9"><input type="text" onfocus="WdatePicker({dateFmt:'yyyy'})" name="fang_year" class="input-text Wdate"style="width:120px;"></div></div>
{{--            <div class="row cl">--}}
{{--                <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>配套设施:</label>--}}
{{--                <div class="formControls col-xs-8 col-sm-9">--}}
{{--                    @foreach($fang_config as $item)--}}
{{--                        <label>--}}
{{--                            <input type="checkbox" name="fang_config[]" value="{{ $item->id }}"/>--}}
{{--                            {{ $item->name }} &nbsp;&nbsp;--}}
{{--                        </label>--}}
{{--                    @endforeach--}}
{{--                </div>--}}
{{--            </div>--}}<div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>房屋图片:</label><div class="formControls col-xs-2 col-sm-2"><div id="picker">房屋图片</div></div><div class="formControls col-xs-6 col-sm-7"><!-- 表单提交时,上传图片地址,以#隔开 --><input type="hidden" name="fang_pic" id="fang_pic"/><!-- 显示上传成功后的图片容器 --><div id="imglist"></div></div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>房东:</label><div class="formControls col-xs-8 col-sm-9"><select name="fang_owner" style="width: 200px;">@foreach($fang_owner as $item)<option value="{{ $item->id }}">{{ $item->name }}</option>@endforeach</select></div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>是否推荐:</label><div class="formControls col-xs-8 col-sm-9 skin-minimal"><div class="radio-box"><label><input name="is_recommend" type="radio" value="0" checked>否</label></div><div class="radio-box"><label><input type="radio" value="1" name="is_recommend">是</label></div></div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>房屋描述:</label><div class="formControls col-xs-8 col-sm-9"><textarea name="fang_desn" class="form-control textarea"></textarea></div></div><div class="row cl"><label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>房屋详情:</label><div class="formControls col-xs-8 col-sm-9"><textarea id="fang_body" name="fang_body">房屋详情信息添加</textarea></div></div><div class="row cl"><div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3"><input class="btn btn-primary radius" type="submit" value="添加房源"></div></div></form></article>
@endsection@section('js')<!-- webuploader上传js --><script type="text/javascript" src="/webuploader/webuploader.js"></script><script type="text/javascript" src="/admin/static/lib/jquery.validation/1.14.0/jquery.validate.js"></script><script type="text/javascript" src="/admin/static/lib/jquery.validation/1.14.0/validate-methods.js"></script><script type="text/javascript" src="/admin/static/lib/jquery.validation/1.14.0/messages_zh.js"></script><!-- 配置文件 --><script type="text/javascript" src="/ueditor/ueditor.config.js"></script><!-- 编辑器源码文件 --><script type="text/javascript" src="/ueditor/ueditor.all.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/distpicker/2.0.7/distpicker.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/distpicker/2.0.7/distpicker.min.js"></script><script>// 下拉选择市和地区// obj 当前对象$('#target').distpicker({});// 富文本编辑器var ue = UE.getEditor('fang_body', {initialFrameHeight: 200});// 初始化Web Uploadervar uploader = WebUploader.create({// 选完文件后,是否自动上传auto: true,// swf文件路径swf: '/webuploader/Uploader.swf',// 文件接收服务端 上传PHP的代码server: '{{ url('admin/fang_owner/upfile') }}',// 文件上传是携带参数formData: {_token: '{{csrf_token()}}'},// 文件上传是的表单名称fileVal: 'file',// 选择文件的按钮pick: {id: '#picker',// 是否开启选择多个文件的能力multiple: true},// 压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!resize: true,duplicate: true});// 上传成功时的回调方法uploader.on('uploadSuccess', function (file, ret) {// 解决表单提交时,图片以#隔开解决let val = $('#fang_pic').val();let tmp = val + '#' + ret.url;$('#fang_pic').val(tmp);// 图片显示let imglist = $('#imglist');// 注:一定要用追加还是不html覆盖let html = `<div style="position: relative;;width:100px;"><img src="${ret.url}" style="width:100px;" /><strong onclick="delpic(this,'${ret.url}')" style="position: absolute;right: 2px;top: 2px;color: white;font-size: 20px;">X<strong></div>`;imglist.append(html);});// 删除图片{{--function delpic(obj, picurl) {--}}{{--    let url = "{{ route('admin.fang_owner.delfile') }}?file=" + picurl;--}}{{--    // 发起请求删除--}}{{--    fetch(url);--}}{{--    // 删除当前点击图片显示--}}{{--    $(obj).parent().remove();--}}{{--    // 修改隐藏域表单--}}{{--    $('#pic').val($('#pic').val().replace(`#${picurl}`, ''));--}}{{--}--}}// 前端表单验证$("#fang-add").validate({// 规则rules: {fang_name: {required: true},fang_province: {min: 1},fang_city: {min: 1},fang_region: {min: 1},fang_addr: {required: true},fang_rent: {number: true},fang_floor: {number: true},fang_year: {required: true},fang_desn: {required: true}},messages: {fang_province: {min: '省份不能为空'},fang_city: {min: '市不能为空'},fang_region: {min: '区或县不能为空'}},// 取消键盘事件onkeyup: false,// 验证成功后的样式success: "valid",// 验证通过后,处理的方法 form dom对象submitHandler: function (form) {// 表单提交form.submit();}});</script>@endsection

表单添加处理

use Elasticsearch\ClientBuilder;
use GuzzleHttp\Client;
public function store(Request $request){//表单数据$dopost=$request->except(['_token','file']);//入库$model=Fang::create($dopost);// es数据的添加// 得到es客户端对象$client = ClientBuilder::create()->setHosts(config('es.host'))->build();// 写文档$params = ['index' => 'fang','type' => '_doc','id' => $model->id,'body' => ['fang_name' => $model->fang_name,'fang_desn' => $model->fang_desn,],];// 添加数据到索引文档中$client->index($params);//添加数据入库成功//发送http请求$client = new Client(['timeout' => 5]);// 得到请求地址$url = config('gaode.geocode');$url = sprintf($url, $model->fang_addr, $model->fang_province);// 发起请求$response = $client->get($url);$body = (string)$response->getBody();$arr = json_decode($body, true);// 如果找到了对应经纬度,存入数据表中if (count($arr['geocodes']) > 0) {$locationArr = explode(',', $arr['geocodes'][0]['location']);$model->update(['longitude' => $locationArr[0],'latitude' => $locationArr[1]]);}// 跳转return redirect(route('admin.fang.index'));}

房东表  fangowner

Schema::create('fang_owners', function (Blueprint $table) {$table->bigIncrements('id');$table->string('name',50)->comment('房东姓名');$table->enum('sex',['男','女'])->default('男')->comment('性别');$table->unsignedTinyInteger('age')->default(20)->comment('年龄');$table->char('phone',15)->comment('手机号码');$table->string('card',20)->comment('身份号码');$table->string('address',100)->comment('家庭住址');$table->string('pic',200)->comment('身份证照片');$table->string('email',50)->default('')->comment('邮箱');$table->timestamps();// 软删除$table->softDeletes();});

laravel 房源相关推荐

  1. Vuebnb:一个用vue.js和Laravel构建的全栈应用

    2019独角兽企业重金招聘Python工程师标准>>> 今年我一直在写一本新书叫全栈Vue网站开发:Vue.js,Vuex和Laravel.它会在Packt出版社在2018年初出版. ...

  2. 房源分页展示和实现webuploader上传图片

    分页展示 创建资源控制器并关联模型 php artisan make:controller Admin/FangController -r -m Models/Fang //资源路由 Route::r ...

  3. Laravel/Lumen 使用 Redis队列

    一.概述 在Web开发中,我们经常会遇到需要批量处理任务的场景,比如群发邮件.秒杀资格获取等,我们将这些耗时或者高并发的操作放到队列中异步执行可以有效缓解系统压力.提高系统响应速度和负载能力. 二.配 ...

  4. php – Laravel 7 Session Lifetime

    根据Laravel config / session.php /* |----------------------------------------------------------------- ...

  5. Laravel中Redis的配置和使用

    引入redis composer require predis/predis 会在composer.json中引入最新版本的predis composer update 把下载predis 库加入到v ...

  6. Laravel和Thinkphp有什么区别,哪个框架好用

    Laravel和Thinkphp这两个php框架对于php程序员都不陌生,新手可能对Thinkphp比较熟,也是国内比较出名的开源框架,更高级的Laravel一般有点经验的才使用. TP框架: Thi ...

  7. Laravel Dcat Admin 安装

    安装 环境 PHP >= 7.1 Laravel 5.5.0 ~ 7.* Fileinfo PHP Extension 开始安装 如果安装过程中出现 composer 下载过慢或安装失败的情况, ...

  8. Laravel 7发行说明

    版本化方案 Laravel及官方发布的包皆遵循 语义版本化.主要框架版本每六个月发布一次 (~2月和~8月),而次要和补丁版本可能每周发布一次.次要版本和补丁 决不 包含非兼容性更改. 引入 Lara ...

  9. Lumen / Laravel 使用网易邮箱 SMTP 发送邮件

    Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件发送服务基于 Symfony 组件 Swift Mailer. 本文记录了 ...

  10. php语+言教程,写给thinkphp开发者的laravel系列教程(九)打印数据-Fun言

    php这种脚本语言调试起来是很方便的: 大多时候看报错打印一下数据就知道问题所在了: php 内置了常用打印函数 print 和 var_dump : 但是打印出来的样式实在让人目瞪狗呆: think ...

最新文章

  1. 2021年有不加班的选择吗?哪些城市加班最严重?
  2. webpack对icon-font图片的处理
  3. 成功解决tensorflow.keras: AttributeError: ‘str‘ object has no attribute ‘decode‘
  4. JVM优化系列-JVM内存溢出的原因
  5. linux防火墙之牛刀小试
  6. 如何才能招募更多合伙人?合伙人裂变的核心是什么?
  7. 如何在一个页面中动态放置多个Droppable来接受不同的Draggable?(accept参数的用法)...
  8. Android内存优化之——static使用篇
  9. 实战|淘宝用户行为分析案例
  10. 四/六层板层叠设计思路
  11. tree traversal (树的遍历) - preorder traversal (前序遍历)
  12. 如何使用WPS进行文档内容对比
  13. mysql 索引配置_Mysql索引配置
  14. 计算机图形学之光线跟踪算法的研究与实现2017年我的优秀毕业论文
  15. 一、Python时间序列小波分析——实例分析
  16. 在Excel工作簿中显示网络图片
  17. 机器学习-常用八大神经网络框架
  18. R3LIVE代码详解(四)
  19. ASPICE-汽车软件过程改进及能力评定
  20. fd(files Descriptor)

热门文章

  1. 001.Heartbeat简介
  2. 动态指针时钟:利用pyqt5制作指针钟表显示实时时间
  3. 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空
  4. 如何让PPT给你的presentation加分
  5. win7服务器建网站教程,win7搭建Web服务器教程
  6. 解决zabbix自动发现主机后主机名称是IP地址的问题
  7. 《白话大数据与机器学习》读书笔记1
  8. 【C51】单片机芯片之——图解74HC595
  9. keepass使用坚果云同步
  10. discuzx2.5php7.0,discuz!X2.5新浪微博登陆