模型
protected $table = 'goods'; //定义表明
protected $guarded = []; //黑名单 定义拒绝操作的字段
protected $fillable = []; //白名单
public $timestamps = false; //是否自动更新时间戳字段
protected $connection = 'mysql_branch'; //定义链接的数据库
链接其他数据库时
DB::connection(‘mysql_branch’)->table(‘table’)->get()
获取插入的id
User::insertGetId([]);
配置其他数据库时:
//config/database.php下粘贴一个配置类型,例如位置一个mysql_old;
'mysql_old' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('Old_DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => 'InnoDB',
],
模板
//模板中解析html 标签
{!! !!}
验证
use App\Http\Requests\KillRequest;
public index(KillRequest $request){
}
//在KillRequest验证中写验证规则,
class KillRequest extends BaseFormRequest
{
public function rules()
{
return [
'coverimage' => 'required',
'goodstitle' => 'required',
];
}
//定义出错后的message信息:
public function messages()
{
return [
'coverimage.required' => '主封面必填',
'goodstitle.required' => '商品标题必填',
];
}
}
辅助函数
str_limit($value, $limit = 25, $end = '...'); //截取固定固定长度的字符串,剩余的用...代替
分页 参照 https://laravelacademy.org/post/6160.html
$results->total()
$results->count()
子查询
$goodsQuery = DB::table('goods')
->leftjoin('goods_shop', 'goods.id', '=', 'goods_shop.gid')
->leftjoin('goods_sales', 'goods.id', '=', 'goods_sales.gid')
->leftjoin('goods_coupon', 'goods.id', '=', 'goods_coupon.gid')
->leftjoin('users', 'goods.userid', '=', 'users.id')
->select('users.name as username',
'goods.id', 'goods.goodslink', 'goods.goodstitle', 'goods.coverimage', 'goods.commissiontype', 'goods.commissionrate', 'goods.copywriting', 'goods.copywritingimage', 'goods.origprice', 'goods.voucherprice', 'goods.created_at', 'goods.goodstype',
'goods_coupon.couponlink', 'goods_coupon.coupontotal', 'goods_coupon.couponremain', 'goods_coupon.couponmoney', 'goods_coupon.reduceprice',
'goods_sales.monthsales', 'goods_sales.increment', 'goods_sales.onehoursales', 'goods_sales.twohoursales', 'goods_sales.todaysales',
'goods_shop.shoptype', 'goods_shop.shopname', 'goods_shop.activitytype')
->orderBy('id', 'desc')
->limit(100); //获取前100条数据
$data = DB::table(DB::raw("({$goodsQuery->toSql()}) as goodsQuery"))
->orderBy('id', 'desc')
->paginate(env('LIMIT'));//从中拿去10条
模型中进行多条件不确定条件查询
$query = User::select('phone');
$a=request('phone');
isset($a) && !empty($a) && $query->where('phone', $a);
$b=request('name');
isset($b) && !empty($b) && $query->where('name', $b);
$data= $query->paginate(20)
laravel优雅的上传图片
public function update(UserRequest $request, ImageUploadHandler $uploader, User $user)
{
if ($request->avatar) {
$result = $uploader->save($request->avatar, 'avatars', $user->id);
if ($result) {
$data['avatar'] = $result['path'];
}
}
$user->update($request->all());
return redirect()->route('users.show', $user->id)->with('success', '个人资料更新成功!');
}
ImageUploadHandler 类内容
namespace App\Handlers;
class ImageUploadHandler
{
// 只允许以下后缀名的图片文件上传
protected $allowed_ext = ["png", "jpg", "gif", 'jpeg'];
public function save($file, $folder, $file_prefix)
{
// 构建存储的文件夹规则,值如:uploads/images/avatars/201709/21/
// 文件夹切割能让查找效率更高。
$folder_name = "uploads/images/$folder/" . date("Ym/d", time());
// 文件具体存储的物理路径,`public_path()` 获取的是 `public` 文件夹的物理路径。
// 值如:/home/vagrant/Code/larabbs/public/uploads/images/avatars/201709/21/
$upload_path = public_path() . '/' . $folder_name;
// 获取文件的后缀名,因图片从剪贴板里黏贴时后缀名为空,所以此处确保后缀一直存在
$extension = strtolower($file->getClientOriginalExtension()) ?: 'png';
// 拼接文件名,加前缀是为了增加辨析度,前缀可以是相关数据模型的 ID
// 值如:1_1493521050_7BVc9v9ujP.png
$filename = $file_prefix . '_' . time() . '_' . str_random(10) . '.' . $extension;
// 如果上传的不是图片将终止操作
if (!in_array($extension, $this->allowed_ext)) {
return false;
}
// 将图片移动到我们的目标存储路径中
$file->move($upload_path, $filename);
return [
'path' => config('app.url') . "/$folder_name/$filename"
];
}
}