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框架有所帮助。