模型篇:

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中一些要记住 的写法的更多相关文章

  1. 在Laravel中一步一步创建Packages

    首先要看一下Laravel官方文档,这是最新4.2的文档,假设想看中文的话点击此处,基本一样.这个github上的库setup-laravel4-package,也是一步一步介绍怎样创建一个包.并关联 ...

  2. laravel中如何利用反射实现依赖注入

    依赖注入 在一个类中经常会依赖于其他的对象,先看一下经典的写法 class Foo { public $bar; public function __construct() { $this->b ...

  3. laravel基础课程---3、路由(Laravel中的常见路由有哪几种)

    laravel基础课程---3.路由(Laravel中的常见路由有哪几种) 一.总结 一句话总结: 6种:post,get,put,patch,delete,options Route::get($u ...

  4. [2018-01-12] laravel中的MVC

    路由里面可以做所有事情,但是真正的项目当中,路由只用来接收请求,并转发给控制器的方法进行处理 首先我们先了解一下 一.app/Http/routes路由的用法: 方法一. 这种方法写完后在控制器创建方 ...

  5. 【repost】js中(function(){…})()立即执行函数写法理解

    摘要: javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ...

  6. Laravel中的日志与上传

    PHP中的框架众多,我自己就接触了好几个.大学那会啥也不懂啥也不会,拿了一个ThinkPHP学了.也许有好多人吐槽TP,但是个人感觉不能说哪个框架好,哪个框架不好,再不好的框架你能把源码读上一遍,框架 ...

  7. js中A包含B的写法与分割字符串的方法

    在java中A包含B的写法 if(A.contains(B)){ ... } 在js中没有contains方法,应该使用下面这种方法: var an = "传染性.潜伏性.破坏性" ...

  8. js中(function(){…})()立即执行函数写法理解

    文章摘自https://my.oschina.net/u/2331760/blog/468672?p={{currentPage+1}} 摘要: javascript和其他编程语言相比比较随意,所以j ...

  9. laravel中日志为daily时如何设置最大保存天数

    在laravel中,日志设置为daily时,默认保存七天的日志,超过则清除七天前的日志.可修改默认的设置,假如要保存30天的日志,则配置如下: 在配置文件config/app.php中添加如下代码: ...

随机推荐

  1. jquery 自定义右键菜单

    如果要自定义右键菜单,那么就需要禁止原本的右键菜单,代码如下 document.oncontextmenu = new Function("return false;");//禁止 ...

  2. C#中无边框窗体移动或拖控件移动窗体

    [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("use ...

  3. robotframework 找出重复元素

    思路 一.把需要进行比较的元素取出来组装成一个list 二.利用python函数,从list中找出重复函数 python函数: from collections import Counter #引入C ...

  4. (转载)搜索引擎的Query自动纠错技术和架构详解

    from http://www.52nlp.cn/%E8%BE%BE%E8%A7%82%E6%95%B0%E6%8D%AE%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E7 ...

  5. HandlerAdapter解析参数过程之HandlerMethodArgumentResolver

    在我们做Web开发的时候,会提交各种数据格式的请求,而我们的后台也会有相应的参数处理方式.SpringMVC就为我们提供了一系列的参数解析器,不管你是要获取Cookie中的值,Header中的值,JS ...

  6. 28.数组中出现次数超过长度一半的数字(python)

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  7. Open Cascade 转化为OpenSceneGraph中的Mesh

    #include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osgGA/StateSetManipul ...

  8. 「SDOI2017」硬币游戏

    题目链接 问题分析 首先一个显然的做法就是建出AC自动机,然后高斯消元.但是这样的复杂度是\(O(n^3m^3)\)的. 我们发现其实只需要求AC自动机上\(n\)个状态的概率,而其余的概率是没有用的 ...

  9. Android_(服务)Vibrator振动器

    Vibrator振动器是Android给我们提供的用于机身震动的一个服务,例如当收到推送消息的时候我们可以设置震动提醒,也可以运用到游戏当中增强玩家互动性 运行截图: 程序结构 <?xml ve ...

  10. 套接字之msghdr结构

    用户端在使用sendmsg/recvmsg发送或者接收数据时,会使用msghdr来构造消息,其对应的内核结构为user_msghdr:其中msg_iov向量指向了多个数据区,msg_iovlen标识了 ...