介绍
本篇文章为大家展示了怎么在Laravel框架中利用播种机自动填充数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
Laravel自动填充数据使用的是播种机类
& lt; php ? use 照亮\数据库\播种机; use 阐明\雄辩的\ \数据库模型; class DatabaseSeeder  extends 播种机 { ,/* * ,,*,Run 从而database 种子。 ,,*/public 才能;function 运行() {才能 ,,//,,} } class MyTableSeeder  extends 播种机 { public 才能;function 运行() {才能 ,,//,,} }
你自定义的播种机只有一个运行函数,里面写你的自动填充步骤
大家会注意到这两个函数
模型::使无防备();//你的填充操作 模型:reguard ();
曾经对这两个函数非常疑惑,到底是干什么用的,只能推测是一对互为反作用的函数。于是去查了下源代码。
在目录\供应商\ laravel \数据库框架\ src \照亮\ \雄辩的下的模型。php下定义了这两个函数
/* * *,Disable all  mass assignable 限制。 * *,@param bool $状态 *,@return 空白 */public static  function 使无防备($ state =,真的) { ,,,静态::$ unguarded =,美元的状态; }/* * *,Enable 从而,mass assignment 限制。 * *,@return 空白 */public static  function reguard () { ,,,静态::$ unguarded =,假; }
看Laravel作者的注释可以知道,是对数据填充限制的操作。
所以使无防备在前,reguard在后,使无防备负责解除自动填充操作限制,reguard负责恢复限制。
在填充操作之前,建议使用模型的成员函数
模型::截断();
这个函数会清空这个模型所对应的数据表,所以请慎重使用。
& lt; php ? use 照亮\数据库\播种机; use 阐明\雄辩的\ \数据库模型; class DatabaseSeeder  extends 播种机 { ,/* * ,,*,Run 从而database 种子。 ,,*/public 才能;function 运行() {才能 ,,,的模型:使无防备(); ,,,这美元→电话(& # 39;PostTableSeeder& # 39;); ,,,的模型:reguard (); ,,} } class PostTableSeeder  extends 播种机 { public 才能;function 运行() {才能 ,,,App \邮报:截断(); ,,,工厂(App \邮报::类,,1000)→创建(); ,,} }
这里有读者会问:为什么我们不把填充操作都写在自带的DatabaseSeeder的运行函数里呢?
因为我们开发一个完整的系统时,可能要填充的数据表有很多张,不希望每次都要大量修改这个运行函数。我们还希望每次填充都能保留下这个填充的过程,所以我们宁愿新写一个类,然后用$ this→电话()函数来调用。
接下来我们来谈谈工厂。
文件目录\ \工厂\ ModelFactory数据库。php
工厂→美元定义(App \邮报::类,,function (骗子),{ return [才能 ,,,& # 39;标题# 39;,=祝辞,摊贩→美元句子(mt_rand (3, 10)), ,,,& # 39;内容# 39;,=祝辞,加入(“\ n \ n",,美元摊贩→段落(mt_rand (3, 6))), ,,,& # 39;published_at& # 39;,=祝辞,摊贩→美元dateTimeBetween(& # 39; 1,月# 39;,,& # 39;+ 3,天# 39;), )才能; });
虽然能看懂,但是不知道这个工厂美元变量是什么?因此去查工厂类找。
在目录\供应商\ laravel \数据库框架\ src \照亮\ \雄辩的工厂。php找到源代码
/* * *,Define a  class with a given set of 属性。 * *,@param string $类 *,@param callable $属性 *,@param string 美元的名字 *,@return 空白 */public function 定义(类,美元,callable 属性,美元,美元name =, & # 39;默认# 39;) { ,,,这美元→定义[美元类][名字]美元,=,美元属性; }
/* * *,Create an  instance of 从而given model 以及persist it 用,数据库。 * *,@param string $类 *,@param array $属性 *,@return 混合 */public function 创建(类,美元,array attributes 美元;=,[]) { ,,,return 这→美元的美元(类)→创建(属性); }怎么在Laravel框架中利用播种机自动填充数据