怎么在Laravel框架中利用播种机自动填充数据

  介绍

本篇文章为大家展示了怎么在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框架中利用播种机自动填充数据