Laravel5.1 模型初探
Laravel的模型也是访问数据库的,它更加面向对象,一个模型对应着一张表 我们可以使用模型对数据做一些增删改查的操作。
1 创建模型
创建模型是可以使用Artisan控制台的:
php artisan make:model Article
一般我比较喜欢连带着migration一起生成:
php artisan make:model Article -m
↑ 执行了上面的Artisan命令后 我们就可以在 /app 下找到我们刚刚创建的模型了,顺便也生成好了migration。
2 模型常用属性
2.1 自定义表名
一个model对应一个表,model对应的表名默认是model名字的复数 即:Article(Model)对应Articles(Table),User(Model)对应Users(Table)。
当然 如果你的Model不想用这种默认方式 也可以自定义:
class Article extends Model
{
protected $table = 'K_Articles';
}
2.2 自定义主键
Model的主键默认是id,你也可以自定义:
class Article extends Model
{
protected $primaryKey = 'article_id';
}
2.3 时间戳
在咱的数据表之中 有create_at 和 update_at 两个时间戳 是Laravel自动管理的,如果你不想要自动管理这两个列 可以这样做:
class Article extends Model
{
public $timestamps = false;
}
2.4 白名单和黑名单
当我们用到批量创建和批量修改时 必须声明黑名单或白名单,在白名单中的属性是可以填充的属性,在黑名单中的属性是不允许被填充的属性:
class Article extends Model
{
protected $fillable = ['title', 'body'];
}
注意:不知道怎么用没关系,3.2我们就会说批量创建。
3 创建数据(模型)
创建模型有两种方法,第一种就是普通的创建,第二种是批量创建。
3.1 普通创建模型
普通创建就是新建一个模型:
public function getCreateArticle()
{
$article = new Article();
$article->title = 'One';
$article->body = 'Learn Laravel Model';
$article->save();
}
3.2 批量创建
批量赋值就是使用create方法来生成一个model并返回这个新插入的model,在你使用create前必须检查model中是否声明了黑名单或白名单:
class Article extends Model
{
protected $fillable = ['title', 'body'];
}
↑ 这是我们的白名单
public function getCreateArticle()
{
$article = Article::create(['title'=>'Two', 'body'=>'Test Create Model', 'comment_count'=>10]);
}
↑ 这是批量创建模型,有个细节哈 我们在fillable中没有添加comment_count 但是create方法中的数组有comment_count的键值。。。结果呢 comment_count并没有被填充,原因是:它不在白名单中 或者 它在黑名单中。
4 更新
更新跟插入很像,也有两种方法 普通的 和 批量的。
4.1 普通更新
public function getUpdateArticle()
{
$article = Article::find(1);
$article->title = 'Article_One';
$article->save();
}
4.2 批量更新
public function getUpdateArticle()
{
$article = Article::find(3);
$article->update(['title' => 'Three', 'body' => 'Third']);
}
5 查找
其实Model的查找跟之前我们学过的构建器很像。
5.1 获取全部的模型
public function getIndex()
{
$articles = Article::all();
foreach ($articles as $article) {
echo $article->title . '<br />';
echo $article->body . '<br />';
}
}
5.2 获取单个模型
使用find 通过主键查找:
public function getIndex()
{
$article = Article::find(1);
dd($article->body);
}
我们也可以判断是否取到了Model:
public function getIndex()
{
$article = Article::find(2);
if (!isset($article)){
abort(404,'Not Found');
}
dd($article);
}
当未取到值是自动报错 应对这种场景 也可以使用findOrFail:
public function getIndex()
{
$article = Article::findOrFail(2);
dd($article);
}
5.3 通过约束获取模型
这就是和构建器相似的地方,你可以像约束构建器一样约束它 这里就不多说了 给了例子吧:
public function getIndex()
{
$article = Article::where('id','>',2)->orderBy('comment_count','desc')->lists('title')->toArray();
dd($article);
}
今天先写这么多,明天说下Model的删除功能。
Laravel5.1 模型初探的更多相关文章
- C语言与内存模型初探
#include<stdio.h> #include<string.h> int main(){ long long int a = 2<<30; char str ...
- Python自动化之select、greenlet和gevent和事件驱动模型初探
进程.线程和协程的区别 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的). 协程和线程一样 ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- 条件随机场(conditional random field,CRF)模型初探
0. 引言 0x1:为什么会有条件随机场?它解决了什么问题? 在开始学习CRF条件随机场之前,我们需要先了解一下这个算法的来龙去脉,它是在什么情况下被提出的,是从哪个算法演进而来的,它又解决了哪些问题 ...
- tensorflow学习5----GAN模型初探
生成模型: 通过观测学习样本和标签的联合概率分布P(X,Y)进行训练,训练好的模型能够生成符合样本分布的新数据,在无监督学习方面,生成式模型能够捕获数据的高阶相关性,通过学习真实数据的本质特征,刻画样 ...
- css3之弹性盒模型初探(一)
什么是弹性盒模型? 弹性盒模型是指在父级改变大小的时候内部的自己元素也会相应的改变大小,即子集会按照父级的大小按比例自适应大小. 弹性盒模型的提出可以解决一些响应式布局的需求 如何使用弹性盒模型? ...
- Laravel5.1 模型 --远层一对多关系
远层一对多我们可以通过一个例子来充分的了解它: 每一篇文章都肯定有并且只有一个发布者 发布者可以有多篇文章,这是一个一对多的关系.一个发布者可以来自于一个国家 但是一个国家可以有多个发布者,这又是一个 ...
- Laravel5.1 模型 --多对多关系
多对多关系也是很常用的一种关系,比如一篇文章可以有多个标签,一个标签下也可以有多篇文章,这就是一个典型的多对多的关系. 1 实现多对多关系 多对多关系我们需要三张表,一张是文章另一张是标签,第三章表是 ...
- Laravel5.1 模型 --一对多关系
一对多关系算是比较常用的一种关联关系了,关于一对多我们可以用 文章对应评论 来举例:一篇文章可以有多个评论,但是一个评论只属于一篇文章. 这就是一对多关系. 1 实现一对多关系 我们先来准备两个模型, ...
随机推荐
- Java虚拟机中的栈和堆的定义和区别
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...
- 安装Python的机器学习包Sklearn 出错解决方法
1 首先须要安装Cython.网上下载后进行本地安装 python setup.py install 2 下载Sklearn包,https://pypi.python.org/pypi/scikit- ...
- node - 导包机制
在学node js的时候,经常各种导包 let http = require('http'); 然后它的运行机制: 1. 查找当前目录下面的node_modules 2. 全局查找(首先添加到path ...
- Python——Baseequestandler class (Interesting found in python‘s document)
class BaseHTTPRequestHandler(socketserver.StreamRequestHandler) HTTP request handler base class. | ...
- css选择器和xpath对照表
- Android重写ViewPager改动滑动灵敏度
使用ViewPager作为一个页面进行切换.里面能够存放非常多View,但有时在操作View时不小心滑动一下就有可能跳到下一页,这并非我们想要的,这里就须要重写ViewPager改动它的滑动条 ...
- C#跨平台物联网通讯框架ServerSuperIO(SSIO)正式开源... 1
今天科技类最大的新闻,莫过于微软宣布.NET开发框架开源计划..NET 开源,集成 Clang 和 LLVM 而且自带 Android 模拟器,这意味着 Visual Studio 这个当下最好没有之 ...
- jQuery控制form表单元素聚焦
CreateTime--2017年5月28日08:57:16Author:Marydon jQuery使form表单的第一个文本框聚焦 /** * 使form表单的第一个文本框聚焦 */ func ...
- Spring 配置中的 ${}
Spring 配置中的 ${} <!-- ============ GENERAL DEFINITIONS========== --> <!-- Configurer tha ...
- (一)Shiro笔记——简介、 架构分析
1. Shiro是什么 Apache Shiro是一个强大灵活的开源安全框架,可以完全处理身份验证,授权,企业会话管理和加密. Apache Shiro的首要目标是易于使用和理解. 安全有时可能非常复 ...