Laravel中一些要记住 的写法
模型篇:
1.根据数据库部分URL返回完整的URL
public function getImageUrlAttribute()
{
// 如果 image 字段本身就已经是完整的 url 就直接返回
if (Str::startsWith($this->attributes['image'], ['http://', 'https://'])) {
return $this->attributes['image'];
}
return \Storage::disk('public')->url($this->attributes['image']);
}
//模板中Laravel 的模型访问器会自动把下划线改为驼峰,所以image_url对应的就是getImageUrlAttribute
<div class="img"><img src="{{ $product->image_url }}" alt=""></div>
$casts用法:将字段转换为期望的类型,目前可转换为以下类型:
integer, real, float, double, string, boolean, object,array,collection,date,datetime 和 timestamp。
protected $casts = [
'email_verified_at' => 'datetime',
];
protected $dates = ['last_used_at'];
表示 last_used_at 字段是一个时间日期类型,在之后的代码中 $address->last_used_at 返回的就是一个时间日期对象(确切说是 Carbon 对象,Carbon 是 Laravel 默认使用的时间日期处理类)。
控制器:
1.条件查询与搜索
public function index(Request $request)
{
// 创建一个查询构造器
$builder = Product::query()->where('on_sale', true);
// 判断是否有提交 search 参数,如果有就赋值给 $search 变量
// search 参数用来模糊搜索商品
if ($search = $request->input('search', '')) {
$like = '%'.$search.'%';
// 模糊搜索商品标题、商品详情、SKU 标题、SKU描述
$builder->where(function ($query) use ($like) {
$query->where('title', 'like', $like)
->orWhere('description', 'like', $like)
->orWhereHas('skus', function ($query) use ($like) {
$query->where('title', 'like', $like)
->orWhere('description', 'like', $like);
});
});
} // 是否有提交 order 参数,如果有就赋值给 $order 变量
// order 参数用来控制商品的排序规则
if ($order = $request->input('order', '')) {
// 是否是以 _asc 或者 _desc 结尾
if (preg_match('/^(.+)_(asc|desc)$/', $order, $m)) {
// 如果字符串的开头是这 3 个字符串之一,说明是一个合法的排序值
if (in_array($m[1], ['price', 'sold_count', 'rating'])) {
// 根据传入的排序值来构造排序参数
$builder->orderBy($m[1], $m[2]);
}
}
} $products = $builder->paginate(16);
2.查出某个字段,对结果转为布尔类型,场景如某人是否收藏过此产品
$favored = false;
if($user = $request->user()){
$favored = boolval($user->favoriteProducts()->find($product->id));
//再传进模板里
HTML篇
1.form表单可以直提交成get形式.
2. 分页后查询的input内容丢失,可将参数加进paginate 如
<div class="float-right">{{ $products->appends($filters)->render() }}</div>
3.下拉式查询
<form action="{{ route('products.index') }}" class="search-form">
<div class="form-row">
<div class="col-md-9">
<div class="form-row">
<div class="col-auto"><input type="text" class="form-control form-control-sm" name="search" placeholder="搜索"></div>
<div class="col-auto"><button class="btn btn-primary btn-sm">搜索</button></div>
</div>
</div>
<div class="col-md-3">
<select name="order" class="form-control form-control-sm float-right">
<option value="">排序方式</option>
<option value="price_asc">价格从低到高</option>
<option value="price_desc">价格从高到低</option>
<option value="sold_count_desc">销量从高到低</option>
<option value="sold_count_asc">销量从低到高</option>
<option value="rating_desc">评价从高到低</option>
<option value="rating_asc">评价从低到高</option>
</select>
</div>
</div>
</form>
$('.search-form select[name=order]').on('change',function(){
$('.search-form').submit();
})
Laravel中一些要记住 的写法的更多相关文章
- 在Laravel中一步一步创建Packages
首先要看一下Laravel官方文档,这是最新4.2的文档,假设想看中文的话点击此处,基本一样.这个github上的库setup-laravel4-package,也是一步一步介绍怎样创建一个包.并关联 ...
- laravel中如何利用反射实现依赖注入
依赖注入 在一个类中经常会依赖于其他的对象,先看一下经典的写法 class Foo { public $bar; public function __construct() { $this->b ...
- laravel基础课程---3、路由(Laravel中的常见路由有哪几种)
laravel基础课程---3.路由(Laravel中的常见路由有哪几种) 一.总结 一句话总结: 6种:post,get,put,patch,delete,options Route::get($u ...
- [2018-01-12] laravel中的MVC
路由里面可以做所有事情,但是真正的项目当中,路由只用来接收请求,并转发给控制器的方法进行处理 首先我们先了解一下 一.app/Http/routes路由的用法: 方法一. 这种方法写完后在控制器创建方 ...
- 【repost】js中(function(){…})()立即执行函数写法理解
摘要: javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ...
- Laravel中的日志与上传
PHP中的框架众多,我自己就接触了好几个.大学那会啥也不懂啥也不会,拿了一个ThinkPHP学了.也许有好多人吐槽TP,但是个人感觉不能说哪个框架好,哪个框架不好,再不好的框架你能把源码读上一遍,框架 ...
- js中A包含B的写法与分割字符串的方法
在java中A包含B的写法 if(A.contains(B)){ ... } 在js中没有contains方法,应该使用下面这种方法: var an = "传染性.潜伏性.破坏性" ...
- js中(function(){…})()立即执行函数写法理解
文章摘自https://my.oschina.net/u/2331760/blog/468672?p={{currentPage+1}} 摘要: javascript和其他编程语言相比比较随意,所以j ...
- laravel中日志为daily时如何设置最大保存天数
在laravel中,日志设置为daily时,默认保存七天的日志,超过则清除七天前的日志.可修改默认的设置,假如要保存30天的日志,则配置如下: 在配置文件config/app.php中添加如下代码: ...
随机推荐
- C语言 - strcmp和strncmp的编程实现及总结
一.strcmp和strncmp的编程实现及总结 1.strcmp函数的实现 要求: 原型: int strcmp(char *dest,char * src,int n); 头文件:# ...
- 2018美团CodeM编程大赛初赛B轮 A题开关灯
题目描述 美团的办公室一共有n层,每层有m个会议室,可以看成是一个n*m的网格图.工程师们每天的工作需要协作的地方很多,经常要到会议室开会解决各种问题.公司是提倡勤俭节约的,因此每次会议室只在使用时才 ...
- HGOI20190812 省常中互测5
Task 1 辩论 有N 个参加辩论的候选人,每个人对这两个议题都有明确的态度,支持或反对.作为组织者,小D 认真研究了每个候选人,并给每个人评估了一个非负的活跃度,他想让活跃度之和尽可能大.选出的候 ...
- linux环境下写C++操作mysql(二)
main.cpp #include<stdio.h> #include<stdlib.h> #include"mysqlInterface.h" int m ...
- python学习之路(14)
通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...
- C++入门经典-例3.9-使用嵌套表达式判断一个数是否是3和5的整数倍
1:代码如下: // 3.9.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using ...
- 【nginx】 配置域名转发到相同地址不同端口下执行相应业务
#doctor upstream doc { server 52.**.**.***:8090; } #patient upstream pat { server 52.**.**.***:8088; ...
- ContentLoadingProgressBar
注意必须设置style: <android.support.v4.widget.ContentLoadingProgressBar android:id="@+id/progressB ...
- git设置mergetool可视化工具
可以设置BeyondCompare,DiffMerge等作为git的比较和合并的可视化工具,方便操作. 设置如下: 先下载并安装BeyondCompare,DiffMerge等. 设置git配置, ...
- Laravel 在构造方法中使用session