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中添加如下代码: ...
随机推荐
- canvas画圆又毛边
canvas使用arc()画园有毛边,如图:,只需给其添加width,height即可,直接上代码 <!DOCTYPE html> <html lang="en" ...
- Http的通信机制?
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. HTTP连接 ...
- Python在VSCode环境抓取TuShare数据存入MongoDB环境搭建
本文出自:https://www.cnblogs.com/2186009311CFF/p/11573094.html 总览 此文分为5个部分 第一:Anaconda(下载和安装) 第二:VSCode( ...
- 任务Task、先后任务
Task类似后台线程. using System; using System.Threading; using System.Threading.Tasks;//引用命名空间 namespace Co ...
- POJ 3683 神父赶婚宴 2-SAT+输出模板
题意:一个小镇里面只有一个牧师,现在有些新人要结婚,需要牧师分别去主持一个仪式,给出每对新人婚礼的开始时间 s 和结束时间 t ,还有他们俩的这个仪式需要的时间(每对新人需要的时间长短可能不同) d ...
- HDU2082 找单词
问题分析 不难想到用母函数做. 令自变量\(x\)的次数就是单词价值,那么答案就是\(x\)的\(1\)次到\(50\)次的系数之和.由于我们只需要处理前\(51\)项,所以暴力多项式相乘即可. 举个 ...
- R_Studio模拟学生成绩对数据简单分析
模拟产生学生名单,记录高数,英语,网站开发三科成绩,然后进行统计分析 假设有100名学生,起始学号为161304000,各科成绩取整 高数成绩为均匀分布随机函数,都在75分以上 英语成绩为正态分布,平 ...
- yum安装Docker
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- Eclipse中文插件安装教程
先运行英文版Eclipse 点击Help选择Install New Software 直接点击Add按钮 Name输入: Babel Location输入: http://download.eclip ...
- html_javascript 基础操作
<!DOCTYPE html> <html> <body> <h1>My Web Page</h1> <p id="demo ...