模型篇:

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();
})

最新文章

  1. linux内核调试技术之修改内核定时器来定位系统僵死问题
  2. WebApiThrottle限流框架使用手册
  3. Android获取屏幕宽度、高度的4种方法
  4. pod install出现[!] /bin/bash -c错误,Installing Realm报错
  5. Java 报表之JFreeChart(第二讲)
  6. 用js枚举实现简易菜单效果
  7. The Dragon of Loowater
  8. HDU 5442 后缀自动机+kmp
  9. MSP430F149学习之路——捕获/比较模式
  10. oracle10g前期准备
  11. go pprof
  12. 最经常使用的两种C++序列化方案的使用心得(protobuf和boost serialization)
  13. Tomcat通过配置一个虚拟路径管理web工程
  14. bootstrap响应式设计简单实践。
  15. tinyproxy代理配置
  16. c#文件管理
  17. 20165231 2017-2018-2《Java程序设计》课程总结
  18. ToolTip C#
  19. sessionStorage在项目中的应用
  20. Jquery 数组与字符串之间的转换

热门文章

  1. 利用rand7() 产生rand10()(腾讯)
  2. JAVA笔记8-对象转型casting
  3. Python实现PDF文件截取
  4. Oracle数据库体系结构-Shared Pool
  5. python5---输入用户名和密码,登录三次不成功,无法再次登录
  6. 5.反生成url
  7. AtCoder AGC037D Sorting a Grid (二分图匹配)
  8. git远程相关
  9. char和vachar的字段长度怎么影响数据库的性能的
  10. EPPlus生成Excel表格(只支持2007及以上)