اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

يمكنك فعل هذا عن طريق مفهومي معمل النماذج Model Factories و بذر البيانات Database seeding .

ستحتاج إنشاء معمل نموذج جديد عن طريق الأمر : 

php artisan make:factory TaskFactory -m Task

ثم نحتاج لإستعمال مكتبة faker لتوليد بيانات حقول تلقائية على هذا النحو في ملف TaskFactory.php ضمن التابع definition : 

return [
      'name' => $this->faker->name,
      'email' => $this->faker->unique()->email,
      'contact_number' => $this->faker->phoneNumber,
];

سنحتاج أيضا إلى إضافة المعمل إلى ملف البذر DatabaseSeeder.php إلى التابع run :

App\Models\Task::factory(10)->create();

ثم أخيرا يمكننا تشغيل أمر البذر : 

php artisan db:seed

كما يمكن تشغيله بعد أمر التهجير على هذا النحو : 

php artisan migrate:fresh --seed

 

  • 0
نشر

بعد إنشاء معمل (factory) لكل من النموذجين Project و Task و ملء الحقول الأساسية بالإضافة إلى عمل العلاقات بين النموذجين بإمكانك القيام بالتالي:

Project::factory()
  ->has(Task::factory()->count(10))
  ->count(5)
  ->create();

في الملف DatabaseSeeder مع إستدعاء الكلاسات في الأعلى.

ثم تنفيذ امر البذر الذي سيُنشئ 5 مشاريع و لكل مشروع 10 مهمات.

  • 0
نشر
بتاريخ 46 دقائق مضت قال علي العبدالله:

شكراً لكم

لاكني اريد ان يقوم بالبذر تلقائياً 

 

مثلاً اقوم انا بتحديد مهمة عامة 

وعندما يقوم المستخدم بإنشاء مشروع 

تلقائيا عند انشاء المشروع يتم انشاء المهمة التي انا وضعتها

هناك عدة طرق للقيام بالأمر:

  • في المتحكم ProjectController عند إنشائك للمشروع في التابع store تستقبل غرض المشروع في متغير و تُنشئ مهمة عامة لهذا المشروع و بهذا الشكل يُصبح عند إنشاء أي مشروع تُنشأ له مهمة عامة:
<?php

public function store(Request $request)
{
  
  // ...
  
  $project = Project::create($data);
  $project->tasks()->create(['body' => "مهمة عامة"]);

  // ..
  
}
  • في النموذج Project تُعيد تعريف الدالة boot ثم تقوم بالتسمع على حدث created بهذا الشكل:
<?php

protected static function boot()
{
  parent::boot();

  static::created(function (Project $project) {
    $project->tasks()->create(['body' => "مهمة عامة"]);
  });
}

الآن عند إنشاء مشروع تلقائياً يتم إنشاء مهمة له و ستأخذ المهمة في الحقل body مهمة عامة.

  • يُمكن عمل الموضوع بإستعمال المُراقبات (observers)، يُمكن أيضاً عمل الأمر بإستعمال الأحداث (events) و المُتسمعات (listeners) أدعوك للإطلاع على هاذين الأمر و عمل ما تريد القيام به بإستعمال هاتين الطريقتين للتوسع أكثر و التمرن.
  • 0
نشر
بتاريخ 2 دقائق مضت قال عبود سمير:

هناك عدة طرق للقيام بالأمر:

  • في المتحكم ProjectController عند إنشائك للمشروع في التابع store تستقبل غرض المشروع في متغير و تُنشئ مهمة عامة لهذا المشروع و بهذا الشكل يُصبح عند إنشاء أي مشروع تُنشأ له مهمة عامة:

<?php

public function store(Request $request)
{
  
  // ...
  
  $project = Project::create($data);
  $project->tasks()->create(['body' => "مهمة عامة"]);

  // ..
  
}
  • في النموذج Project تُعيد تعريف الدالة boot ثم تقوم بالتسمع على حدث created بهذا الشكل:

<?php

protected static function boot()
{
  parent::boot();

  static::created(function (Project $project) {
    $project->tasks()->create(['body' => "مهمة عامة"]);
  });
}

الآن عند إنشاء مشروع تلقائياً يتم إنشاء مهمة له و ستأخذ المهمة في الحقل body مهمة عامة.

  • يُمكن عمل الموضوع بإستعمال المُراقبات (observers)، يُمكن أيضاً عمل الأمر بإستعمال الأحداث (events) و المُتسمعات (listeners) أدعوك للإطلاع على هاذين الأمر و عمل ما تريد القيام به بإستعمال هاتين الطريقتين للتوسع أكثر و التمرن.

هل يمكن تحديد عدد 

مثلا اريد انشاء 5 

هل يعمل عليه count(5) او اقوم بتكرار الامر 

 

  • 0
نشر
بتاريخ 15 دقائق مضت قال علي العبدالله:

SQLSTATE[HY000]: General error: 1364 Field 'task' doesn't have a default value (SQL: insert into `tasks` (`project_id`, `updated_at`, `created_at`) values (13, 2021-06-05 12:01:11, 2021-06-05 12:01:11))

قم بتغيير الحقل من body للحقل الموافق لديك. أعتقد أنه task حسب رسالة الخطأ

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...