layout | title | date | author | desc | in_head |
---|---|---|---|---|---|
post
|
Laravel框架学习笔记(三)
|
2017-11-17 16:30:02 +0800
|
南丞
|
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
|
<style> .article-content p{ text-indent: 2em; line-height: 1.75rem; }</style>
|
Laravel框架学习笔记(三)之 Eloquent 操作
闲话不多说,直接起飞:
- Eloquent 的 all 方法返回模型表的所有结果,由于每一个 Eloquent 模型都是一个查询构建器,你还可以添加约束条件到查询,然后使用 get 方法获取对应结果:
$flights = App\Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get();
注:由于 Eloquent 模型本质上就是查询构建器,可以在Eloquent查询中使用查询构建器的所有方法。 比如: where('id','<>',5) 等
-
查询构造器常用的方法:
first(); 从数据表中获取一行数据 value(); 从结果中获取单个值 pluck(); 获取包含单个列值的数组,列值指定自定义键(第二个参数) count(); max(); avg(); sum(); Select('字段'); orderBy();
where 写法:
where('id','<>',5) where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ]) whereBetween 方法验证列值是否在给定值之间: whereBetween('votes', [1, 100]) whereIn 方法验证给定列的值是否在给定数组中: whereIn('id', [1, 2, 3]) whereNull 方法验证给定列的值为NULL: whereNull('updated_at') whereDate 方法用于比较字段值和日期: whereDate('created_at', '2016-10-10') whereColumn 方法用于验证两个字段是否相等: whereColumn('first_name', 'last_name')
查询排序
latest() oldest() latest 和 oldest 方法允许你通过日期对结果进行排序,默认情况下,结果集通过 created_at 字段进行排序
插入
insertGetId () 使用insertGetId方法来插入记录并返回ID值:
3, 模板中输出带有html文本的内容
```
{!! !!}
```
4, 开启debugbar
composer.json 文件中
"barryvdh/laravel-debugbar": "^2.3",
app.php 中 的 providers中 添加
```php
'Barryvdh\Debugbar\ServiceProvider',
```
5, 配置使用多路由文件
在 app/Providers/RouteServiceProvider.php 的 map 方法中可以如下定义:
public function map(Router $router)
{
$this->mapApiRoutes();
$this->mapWebRoutes();
$this->mapAdminRoutes();
}
protected function mapAdminRoutes()
{
Route::group([
'prefix'=>'/admin',
'middleware' => 'admin',
'namespace' => 'App\Http\Controllers\Admin',
], function ($router) {
require base_path('routes/admin.php');
});
}
6, 在使用框架的时候加一个Service层 然后在控制器中 直接去new这个Service层 也可以使用契约 把这个做成一个服务
1,在app下新建一个contracts 文件夹 用来存放我们自定义的契约
新建文件定义一个契约接口TestContract。
<?php
namespace App\Contracts;
interface TestContract
{
public function callMe($controller);
}
2,在Services 新建一个 TestService
<?php
namespace App\Services;
use App\Contracts\TestContract;
class TestService implements TestContract
{
public function callMe($controller)
{
dd('Call Me From TestServiceProvider In '.$controller);
}
}
3,接下来我们定义一个服务提供者TestServiceProvider用于注册该类到容器。创建服务提供者可以使用如下Artisan命令:
php artisan make:provider TestServiceProvider
4,修改生成的TestServiceProvider.php
public function register()
{
//使用singleton绑定单例
$this->app->singleton('test',function(){
return new TestService();
});
//使用bind绑定实例到接口以便依赖注入
$this->app->bind('App\Contracts\TestContract',function(){
return new TestService();
});
}
5,注册服务提供者
'providers' => [
//其他服务提供者
App\Providers\TestServiceProvider::class,
],
7, 文件上传
//打开config/filesystems.php 找到 disks
'disks' => [
// 上面还有很多,下面是自己加的
// 新建一个本地端uploads空间(目录) 用于存储上传的文件
'uploads' => [
'driver' => 'local',
// 文件将上传到storage/app/uploads目录
'root' => storage_path('app/uploads'),
// 文件将上传到public/uploads目录 如果需要浏览器直接访问 请设置成这个
//'root' => public_path('uploads'),
],
]
//新建一个上传Controller
namespace App\Api\V1\Controllers\Upload;
use Dingo\Api\Http\Request;
use Dingo\Api\Exception\StoreResourceFailedException;
use Storage;
class UploadFiles
{
public function upfile(Request $request) {
if (!$request->hasFile('file')) {
return response()->json([], 500, '无法获取上传文件');
}
$file = $request->file('file');
if ($file->isValid()) {
// 获取文件相关信息
$originalName = $file->getClientOriginalName(); // 文件原名
$ext = $file->getClientOriginalExtension(); // 扩展名
$realPath = $file->getRealPath(); //临时文件的绝对路径
$type = $file->getClientMimeType(); // image/jpeg
// 上传文件
$filename = date('Ymd/His');
// 使用我们新建的uploads本地存储空间(目录)
$path = $file->store($filename, 'uploads');
return response()->json([
'status_code' => 200,
'message' => 'success',
'photo' => $path,
'name' => $originalName,
]);
} else {
return response()->json([], 500, '文件未通过验证');
}
}
}
8,model注入:
public function destroy(Article $article)
{
}
*: Article Model类必须与路由一致**
9, 排除 CSRF 保护
中间件VerifyCsrfToken 中 设置
$except 的内容就Ok了