بسم الله الرحمن الرحيم
فى بعض الأحيان نحتاج الى تكرار صف فى قاعدة البيانات و أجراء تعديلات بسيطة عليه.
مثال : لو أنك تعمل على سيستم TODO List فسيكون لديك جدول جدول أسمه Tasks، نفترض انك تريد تكرار مهمه معينه قد أنتهيت منها و لكن تريد ان تكررها و تكون " غير منتهية "، فى السابق كنا نعيد كتابة الصف من جديد بالكامل، تكون هذه العملية سهله لو كانت المعلومات الموجوده بسيطة لكن لو الصف به الكتير من المعلومات يكون الأمر مرهقا و قابل للخطأ.
هنا جاءت Laravel و معها Eloquent بحل خفى و غير موجود فى Documentation على ما أعتقد و هى داله أسمها Replicate
لشرح المثال بالكود :
دا هيكون شكل ال Migration ا تبع الجدول المهام
Schema::create('tasks', function (Blueprint $table) { $table->increments('id'); $table->string('task'); $table->text('description'); $table->boolean('done'); $table->timestamps(); });
ودا هيكون شكل ال Model
namespace App\Models class Tasks extends Model { protected $table = 'tasks'; protected $fillable = ['task', 'description' , 'done']; } نفترض ان لدينا controller أسمه TaskController namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Task; classTaskController extends Controller { public function copyTask(Request $request)) { $task = Task::find($request->get('id')) $newTask = $task->replicate(); $newTask->done = 0 ; $newTask->save(); } }
فى الأعلى قمنا بعمل صف جديد بنفس بيانات الصف الجديد لكن غيرنا قيمه العمود done الى 0 ليصبح غير منفذ، تقوم Eloquent مباشرة بتغير قيم الأعمدة ( created_at - updated_at )
يمكن أيضا التعامل مع العلاقات Relations الخاصه بالصف الجديد و نقلها للجديد.
المرجع : https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html