Laravel 5框架学习之Eloquent (laravel 的ORM)
我们来生成第一个模型
phpartisanmake:modelArticle #输出 Modelcreatedsuccessfully. CreatedMigration:2015_03_28_062517_create_articles_table
查看一下生成的文件app/Article.php
<?phpnamespaceApp; useIlluminate\Database\Eloquent\Model; classArticleextendsModel{ // }
没什么特别的,除了继承自Model以外,但是具有强大的功能,这些都封装在laravel的Model中。模型自动具有了save()update()findXXX()等强大的功能。
tinker是laravel提供的命令行工具,可以和项目进行交互。
phpartisantinker #以下是在tinker中的交互输入 PsyShellv0.4.1(PHP5.4.16—cli)byJustinHileman >>>$name='zhangjinglin'; =>"zhangjinglin" >>>$name =>"zhangjinglin" >>>$article=newApp\Article; =><App\Article#000000005c4b7ee400000000ab91a676>{} >>>$article->title='MyFirstArticle'; =>"MyFirstArticle" >>>$article->body='Somecontent...'; =>"Somecontent..." >>>$article->published_at=Carbon\Carbon::now(); =><Carbon\Carbon#000000005c4b7ee600000000ab91dcb6>{ date:"2015-03-2806:37:22", timezone_type:3, timezone:"UTC" } >>>$article; =><App\Article#000000005c4b7ee400000000ab91a676>{ title:"MyFirstArticle", body:"Somecontent...", published_at:<Carbon\Carbon#000000005c4b7ee600000000ab91dcb6>{ date:"2015-03-2806:37:22", timezone_type:3, timezone:"UTC" } } >>>$article->toArray(); =>[ "title"=>"MyFirstArticle", "body"=>"Somecontent...", "published_at"=><Carbon\Carbon#000000005c4b7ee600000000ab91dcb6>{ date:"2015-03-2806:37:22", timezone_type:3, timezone:"UTC" } ] >>>$article->save(); =>true #查看数据结果,添加了一条记录 >>>App\Article::all()->toArray(); =>[ [ "id"=>"1", "title"=>"MyFirstArticle", "body"=>"Somecontent...", "published_at"=>"2015-03-2806:37:22", "created_at"=>"2015-03-2806:38:53", "updated_at"=>"2015-03-2806:38:53" ] ] >>>$article->title='MyFirstUpdateTitle'; =>"MyFirstUpdateTitle" >>>$article->save(); =>true >>>App\Article::all()->toArray(); =>[ [ "id"=>"1", "title"=>"MyFirstUpdateTitle", "body"=>"Somecontent...", "published_at"=>"2015-03-2806:37:22", "created_at"=>"2015-03-2806:38:53", "updated_at"=>"2015-03-2806:42:03" ] ] >>>$article=App\Article::find(1); =><App\Article#000000005c4b7e1600000000ab91a676>{ id:"1", title:"MyFirstUpdateTitle", body:"Somecontent...", published_at:"2015-03-2806:37:22", created_at:"2015-03-2806:38:53", updated_at:"2015-03-2806:42:03" } >>>$article=App\Article::where('body','Somecontent...')->get(); =><Illuminate\Database\Eloquent\Collection#000000005c4b7e1800000000ab91a676>[ <App\Article#000000005c4b7e1b00000000ab91a676>{ id:"1", title:"MyFirstUpdateTitle", body:"Somecontent...", published_at:"2015-03-2806:37:22", created_at:"2015-03-2806:38:53", updated_at:"2015-03-2806:42:03" } ] >>>$article=App\Article::where('body','Somecontent...')->first(); =><App\Article#000000005c4b7e1900000000ab91a676>{ id:"1", title:"MyFirstUpdateTitle", body:"Somecontent...", published_at:"2015-03-2806:37:22", created_at:"2015-03-2806:38:53", updated_at:"2015-03-2806:42:03" } >>> >>>$article=App\Article::create(['title'=>'NewArticle','body'=>'Newbody','published_at'=>Carbon\Carbon::now()]); Illuminate\Database\Eloquent\MassAssignmentExceptionwithmessage'title'
MassAssignmentException,laravel保护我们不能直接插入记录。比如,在一些特殊情况下我们需要直接利用表单的信息填充数据库记录,但是如果我们并没有在表单中添加密码字段,而黑客产生了密码字段连同我们的其他字段一起送回服务器,这将产生修改密码的危险,所以我们必须明确的告诉laravel我们的模型那些字段是可以直接填充的。
修改我们的模型文件Article.php
<?phpnamespaceApp; useIlluminate\Database\Eloquent\Model; classArticleextendsModel{ protected$fillable=[ 'title', 'body', 'published_at' ]; }
表示,title,body,published_at是可以直接填充的。
退出tinker,重新进入
>>>$article=App\Article::create(['title'=>'NewArticle','body'=>'Newbody','published_at'=>Carbon\Carbon::now()]); =><App\Article#000000005051b2c7000000007ec432dd>{ title:"NewArticle", body:"Newbody", published_at:<Carbon\Carbon#000000005051b2c6000000007ec4081d>{ date:"2015-03-2806:55:19", timezone_type:3, timezone:"UTC" }, updated_at:"2015-03-2806:55:19", created_at:"2015-03-2806:55:19", id:2 } #It'sok >>>App\Article::all()->toArray(); =>[ [ "id"=>"1", "title"=>"MyFirstUpdateTitle", "body"=>"Somecontent...", "published_at"=>"2015-03-2806:37:22", "created_at"=>"2015-03-2806:38:53", "updated_at"=>"2015-03-2806:42:03" ], [ "id"=>"2", "title"=>"NewArticle", "body"=>"Newbody", "published_at"=>"2015-03-2806:55:19", "created_at"=>"2015-03-2806:55:19", "updated_at"=>"2015-03-2806:55:19" ] ] >>>$article=App\Article::find(2); =><App\Article#000000005051b22b000000007ec432dd>{ id:"2", title:"NewArticle", body:"Newbody", published_at:"2015-03-2806:55:19", created_at:"2015-03-2806:55:19", updated_at:"2015-03-2806:55:19" } >>>$article->update(['body'=>'NewUpdaetBody']); =>true #update自动调用save()
以上所述就是本文的全部内容了,希望能够对大家学习Laravel5框架有所帮助。