\Phone $phone * @property-read \Illuminate\Database\Eloquent\Collection|\App\Shop[] $shops * @method...\Eloquent\Collection|\App\Shop[] $shop * @method static \Illuminate\Database\Query\Builder|\App\Product...\Eloquent\Collection|\App\Merchant[] $merchant * @property-read \Illuminate\Database\Eloquent\Collection...::class, ShopRepository::class); } //app/Http/Controllers/ShopController.php class ShopController...预加载查询 (1)嵌套预加载 Eloquent在通过属性访问关联数据时是延迟加载的,就是只有该关联数据只有在通过属性访问它时才会被加载。在查找上层模型时可以通过预加载关联数据,避免N+1问题。
$primaryKey成员变量覆盖该字段名称,另外,Eloquent假设主键字段是自增的整数,如果你想用非自增的主键或者非数字的主键的话,必须指定模型中的public属性$incrementing为false...在eloquent ORM中,get和all方法查询出多个结果集,它们的返回值是一个Illuminate\Database\Eloquent\Collection对象,该对象提供了多种对结果集操作的方法...// } }); 查询单个结果 使用find和first方法查询单个结果,返回的是单个的模型实例 // 通过主键查询模型......$flight = App\Flight::where('active', 1)->first(); 使用find方法也可以返回多个结果,以Collection对象的形式返回,参数为多个主键 $flights...\Database\Eloquent\ModelNotFoundException异常 $model = App\Flight::findOrFail(1); $model = App\Flight::
php namespace App\Http\Controllers; use App\Models\Test; use Illuminate\Http\Request; class TestMdlController...php namespace App\Models; use Illuminate\Database\Eloquent\Model; class BaseModel extends...php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Test extends BaseModel {...和使用了 DB 取出来的数据一样的是都是一个 Collection 集合,不一样的是 DB 取出来的是数组,Model 取出来的是一个类,需要一层一层的剥开点到 attributes 我们才能看到数据...php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Test extends BaseModel {
因此,尽管我们使用的是辅助函数,我们依然可以编写以下测试来验证该方法是否使用我们预期的参数来调用: use Illuminate\Support\Facades\Cache; /** * 一个基础功能的测试用例...php namespace App\Http\Controllers; use Illuminate\Support\Facades\Cache; use App\Http\Controllers\Controller...我们使用 Facade 进行的任何调用都将传递给 Laravel 缓存服务的底层实例。...php namespace App; use App\Contracts\Publisher; use Illuminate\Database\Eloquent\Model; class Podcast...php namespace App; use Facades\App\Contracts\Publisher; use Illuminate\Database\Eloquent\Model; class
laravel/framework/src/Illuminate/Database/Eloquent/Collection.php 对象,然后这个对象里面有个 items 属性,是一个数组。...Route::get('model/test/bindroute/controller/{mTest}', [\App\Http\Controllers\MTestController::class,...__call() 魔术方法中,在这里,我们看到它调用了 forwardCallTo() 方法,然后传递进去的是一个新的 查询构造器 对象和方法名以及参数。...不过这里需要注意的是,模型默认生成的 QueryBuilder 是 llaravel/framework/src/Illuminate/Database/Eloquent/Builder.php 对象,...但 Eloquent\Builder 的内部持有的一个query 属性依然是 Query\Builder 对象,也就是说在底层,它依然是调用的我们熟悉的那个 查询构造器 来进行工作的。
[laravel] laravel的数据库配置 找到程序目录结构下.env文件 配置基本的数据库连接信息 DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog...,array("1")); 获取到一个数组,数组中的每一个结果是一个StdClass对象 <?...php namespace App\Http\Controllers\Index; use App\Http\Controllers\Controller; use DB; class IndexController...--create=users 此命令会在database/migrations目录下面创建一个迁移文件 打开生成的迁移文件,在up方法里面进行字段的创建,这里会用到数据库的结构构造器Schema 运行迁移命令...在app目录下生成一个User.php的模型文件 ?
,在实例化对象时,static会根据运行时调用的类来决定实例化对象,而self是根据所在位置的类来决定实例化对象 4.Laravel示例:Illuminate\Database\Eloquent\Model.php.../Http/Controllers目录下,继承自Illuminate\Routing\Controller类,作为HTTP请求的二次分发控制部分,通过依赖注入解决了与路由的紧耦合关系 基础控制器路由:Route...A.HTTP请求实例的操作 1.三种获取Request的方法 Request::all(); //Facade方式 app(‘request’); //直接服务容器获取...\Database\Query\Grammars SQL语句执行阶段,Illuminate\Database\Connection C.Eloquent ORM 1.两个阶段 Eloquent ORM查询构造器的生成...,Illuminate\Database\Eloquent\Model::newQuery() 操作命令的执行,Illuminate\Database\Eloquent\Builder 2.ORM映射最大的好处是将数据表的结构映射成一个类对象
快速入门 更换表名 protected $table = 'my_flights'; 更换主键名称 protected $primaryKey = 'id'; 注意: Eloquent 默认主键字段是自增的整型数据...deletedRows = App\Flight::where('active', 0)->delete(); 软删除 // Eloquent 模型 use Illuminate\Database\Eloquent...::with('author.contacts')->get(); // 渴求式加载指定字段 // 注: 使用这个特性时, id 字段是必须列出的 $users = App\Book::with('author....']), ]); // 使用 create 创建, 与 save 不同的是, 它j接收一个关联数组, create 方法遵循模型属性的批量赋值操作 $post = App\Post::find(1)...] ]); 在中间表上保存额外数据 处理多对多关联时, save 方法接收中间表数组作为第二个参数: App\User::find(1)->roles()->save($role, ['expires'
/Http/Controllers/UsersController.php: public function show(User $user) { return view('users.show...', compact('user')); } 当访问 http://test.com/users/1 时,控制器对应的变量名$user会匹配路由片段中的{user},这样,Laravel 会自动注入与请求...URI 中传入的 ID 对应的用户模型实例 此功能称为 『隐性路由模型绑定』,是『约定优于配置』设计范式的体现,同时满足以下两种情况,此功能即会自动启用: 路由声明时必须使用 Eloquent 模型的单数小写格式来作为路由片段参数...控制器方法传参中必须包含对应的 Eloquent 模型类型声明,并且是有序的: 综上,Laravel 将会自动查找 ID 为 1 的用户并赋值到变量 $user 中,如果数据库中找不到对应的模型实例,会自动生成...HTTP 404 响应
php namespace App\Casts; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; class Json implements...php namespace App; use App\Casts\Json; use Illuminate\Database\Eloquent\Model; class User extends...下面有个例子,我们会假设一个 App\View\Components\Alert 组件定义是这样的: <?...$post; }); 隐式绑定约束 有时,当在路由中隐式绑定多个 Eloquent 模型时,可能希望对第二个 Eloquent 模型进行约束,使其必须是第一个 Eloquent 模型的子类。...此外,运行器将在第一次测试失败时自动停止: php artisan test 可以传递给 phpunit 命令的任何参数也可以传递给 Artisan test 命令: php artisan test
关于使用Repository模式来封装下Model逻辑,不让Controller里塞满了很多Model逻辑,这样做是有很多好处的,最主要的就是好测试和代码架构清晰,也符合SOLID原则。...SegmentFault上也有相关的文章描述。也打算最近新开一篇文章聊一聊这个,PHPUnit也打算过段时间聊一聊。 个人研究了下Artisan命令行,是可以的。...$field * @param $value * @param array $columns * @return \Illuminate\Database\Eloquent\Collection|static...,就和路由参数一样),将会被this->argument('repository')方法捕捉到,{--model=}是选项,可填可不填,将会被 // app/Console/Kernel protected...是可以生成RepositoryInterface和对应的接口实现文件,这里一个是加了--model选项一个没加的,没加的话这里第一个指令就默认Model的名称是Shop。
Yaf_Session是Yaf对Session的包装, 实现了Iterator, ArrayAccess, Countable接口, 方便使用.关于Yaf_Session的文档介绍:http://www.laruence.com...loquent ORM操作介绍:http://www.golaravel.com/laravel/docs/4.2/eloquent/ 因为下载有点慢,我就直接从laravel5.1的包里面直接复制出的...->toArray(); print_r($data); } 更多关于Eloquent ORM的操作介绍可移步: http://www.golaravel.com/laravel...第一参数需要定义一个回调函数,也可以是一个类中的某个函数。...,值为你希望传入的参数。
phpnamespace App;use Illuminate\Database\Eloquent\Model;class Post extends Model{protected $guarded =...($user->paginate());}静态collection方法将采用要转换的记录集合,并确保为每个记录实例化一个新的UsersResource。...phpnamespace App\Http\Resources;use Illuminate\Http\Resources\Json\Resource;class UsersResource extends...phpnamespace App\Http\Resources;use Illuminate\Http\Resources\Json\Resource;class PostsResource extends...简化和逐步进行本文着重于学习如何使用 Resource::collection 而不是手动实例化类,并将关系数据的提供(或不提供)责任委托给控制器。
php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB;...但是并不提倡这种拼接字符串的方式来添加数据,维护起来麻烦不说还不安全,所以我换种方式,DB 还有个 table 方法可以传表名再调用 insert 方法可以传要插入的数组,于是我改造那么一丢丢下面就是改造后的样子...php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB;...可以看到里面有个 run 方法这个方法会在执行 db:seed 这个 Artisan 命令 时被调用,利用 DB 的方法写上要填充的内容,你也可以用 查询构造器 或 Eloquent 模型工厂 来手动插入数据...,我们会创建很多填充文件如果有外键的话执行顺序不对是会报错的所以需要严格的自己指定顺序,OK我们在执行一下 php artisan db:seed 命令 ?
我们还将使用 API 为用户产品创建功能齐全的 CRUD 应用。 在使用跨平台应用程序时, API 是一个非常不错的选择。除了网站,您的产品可能还有 Android 和 iOS 应用程序。...ApiController : php artisan make:controller ApiController 这将会在 app/Http/Controllers 目录下创建 ApiController.php...php namespace App\Http\Controllers; use App\Http\Requests\RegisterAuthRequest; use App\User; use Illuminate...php artisan migrate 现在,我们必须在 User 模型中添加一个关系来检索相关产品。在 app/User.php 中添加以下方法。...public function products() { return $this->hasMany(Product::class); } 在 app/Http/Controllers 目录下打开
编写全局作用域 1.定义一个类 namespace App\Scopes; use Illuminate\Database\Eloquent\Scope; use Illuminate\Database...Eloquent 还能使用闭包定义全局作用域,如此一来,便就没必要定义一个单独的类了: namespace App; use Illuminate\Database\Eloquent\Model...渴求式加载指定字段 有时候,使用渴求式加载时不需要查询全部字段,这个时候可使用“指定字段” 格式with('模型方法:id,字段1,字段2') 需要注意的是渴求式加载指定字段必须列出父表id 如下例子...\Database\Eloquent\Model,而中间表模型继承自Illuminate\Database\Eloquent\Pivot 创建中间表模型 namespace App; use Illuminate...(['phone'=>3252355]), ]); } 使用create方法添加值 create方法和save方法一样也是向模型插入值,不同的是save接收的是一个完整的Eloquent实例,
Eloquent是什么 Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database Abstraction...中文文档: http://laravel-china.org/docs/eloquent#relationships 下面我们开始一个一个地学习。...\Collection` 类的一个实例。...,第三个参数是本类的 id,第四个参数是第一个参数那个类的 id。...我们可以使用一个重要的特性,关系预载入:http://laravel-china.org/docs/eloquent#eager-loading 直接上代码: $users = User::with('
php namespace App\Scopes; use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\...php namespace App; use App\Scopes\AgeScope; use Illuminate\Database\Eloquent\Model; class User extends...scope前缀即可 $users = App\User::popular()->active()->orderBy('created_at')->get(); 本地作用域方法是可以接受参数的 public...,该数组的key为要转换的属性名称,value为转换的数据类型,当前支持integer, real, float, double, string, boolean, object, array,collection...json和array的转换 $user = App\User::find(1); $options = $user->options; $options['key'] = 'value'; $user
因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSqlServer...环境说明: 这里使用的是win 7 下的 virtual studio 2017 ,数据库使用的Sql Server 1.创建一个web项目 文件->新建->项目 选择 ASP.NET Core Web...Use this method to configure the HTTP request pipeline....app.UseHsts(); } app.UseHttpsRedirection(); app.UseMvc();...} } 注意,这里是不同于官网教程中的地方,对比如下 ConfigureService方法中: //官网 services.AddDbContext(opt =>