欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Laravel ORM clone模型的用法(主要是replicate和push两个函数) 有大用

首先建立一个简单的文章和标签表来演示 replicate() 方法的实用。

  • 建立表和迁移文件

  1. # wanli @ wanlideMacBook-Pro in /Applications/MAMP/htdocs/iTest [20:14:03]
  2. $ php artisan make:model Models/article -m
  3. Model created successfully.
  4. Created Migration: 2016_06_16_121430_create_articles_table
  5. # wanli @ wanlideMacBook-Pro in /Applications/MAMP/htdocs/iTest [20:14:30]
  6. $ php artisan make:model Models/tag -m
  7. Model created successfully.
  8. Created Migration: 2016_06_16_121450_create_tags_table
  • 文章数据结构

  1. <?php
  2. use Illuminate\Database\Schema\Blueprint;
  3. use Illuminate\Database\Migrations\Migration;
  4. class CreateArticlesTable extends Migration {
  5.    /** * Run the migrations. * * @return void */
  6.    public function up() {
  7.        Schema::create('articles', function (Blueprint $table) {
  8.            $table->increments('id');
  9. $table->string('title')->default('')->comment('文章标题');
  10. $table->text('content')->comment('文章内容');
  11. $table->timestamps();
  12. });
  13. }
  14. /** * Reverse the migrations. * * @return void */
  15. public function down() {
  16. Schema::drop('articles');
  17. }
  18. }
  • 标签数据结构

  1. <?php
  2. use Illuminate\Database\Schema\Blueprint;
  3. use Illuminate\Database\Migrations\Migration;
  4. class CreateTagsTable extends Migration {
  5.    /** * Run the migrations. * * @return void */
  6.    public function up() {
  7.        Schema::create('tags', function (Blueprint $table) {
  8.            $table->increments('id');
  9. $table->string('name')->default('')->comment('标签名称');
  10. $table->timestamps();
  11. });
  12. }
  13. /** * Reverse the migrations. * * @return void */
  14. public function down() {
  15. Schema::drop('tags');
  16. }
  17. }

简单使用

首先我们在文章表中插入一条数据:


数据


  1. Article::find(1)->replicate()->save();
  2. dd(Article::all()->toArray());

在页面中显示:


数据


复制并修改其中的一部分数据

如果要修改其中的一部分数据,只需要将复制出来的对象赋值给一个变量,然后改变其中的数据再 save() 就可以了:

  1. $article = Article::find(1)->replicate();
  2. $article->title = 'Laravel 复制数据并修改标题';
  3. $article->save();
  4. dd(Article::all()->toArray());

数据


复制模型及关系

将文章的标签也一同复制,文章与标签之间的关系我就不展示了,这里直接贴代码:

  1. $article = Article::with('tags')->find(1);
  2. $clone = $article->replicate();
  3. // 复制关系
  4. $clone->push();
  5. foreach($article->tags as $tag)
  6. {
  7. $clone->tags()->attach($tag);
  8. }

OK,今天的小技巧就到这里了,


来自 https://blog.csdn.net/jined/article/details/110407982



 

普通分类: