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

السؤال

نشر

استغرقت جهدي لحل هذين الخطئين 

  1. عدم دخول البيانات في قاعدة البيانات
  2. الخطأ الوارد في الصورة أدناه طبعا يذهب الخطأ إذا كان داخل الدالة الشرطية 
@if (is_array($projects) || is_object($projects)) ...

ولكن تعمل الصفحةجيدا مع المدرب ومن دون الدالة الشرطية لماذا ؟

myprojects.rar

122.JPG

Recommended Posts

  • 0
نشر

هناك عدة أخطاء حيث أن projects هو عبارة عن مُتغير يتم تمريره من المتحكم:

$projects = auth()->user()->projects;

في الأخير أنت تنادي على العلاقة projects لكن في النموذج User قمت بتسمية العلاقة ب project لذلك يجب تصحيح ذلك لتُصبح العلاقة:

public function projects()
{
  return $this->hasMany(Project::class);
}

أنت لا تقوم بتحديد ماهو المفتاح الثانوي في العلاقة لذلك يجب أن تحترم العُرف و تقوم بتسميته user_id و ليس users_id و في هذه الحالة لديك طريقتين:

تغيير users_id إلى user_id في كل من ملف التهجير:

$table->foreignId('user_id')->references('id')->on('users')->onDelete('cascade');

تنفيذ أمر التهجير:

php artisan migrate:fresh

ثم تغيير الحقل من users_id إلى user_id في مصفوفة fillable في النموذج Project ثم تغيير التابع store في المتحكم ProjectController ليُصبح:

<?php
public function store(Request $request)
{
  $data = request()->validate([
    "title" => 'required',
    "description" => 'required',
  ]);

  $data['user_id'] = auth()->id();
  Project::create($data);

  return redirect('/projects');

}

و بهذا الشكل ستعمل.

الطريقة الثانية بترك الحقل كما تريد users_id لكن تحتاج إلى تغيير العلاقة بحيث تُحدد المفتاح الثانوي بهذا الشكل:

public function projects()
{
  return $this->hasMany(Project::class, 'users_id');
}

و بطبيعة الحال تجعل الدالة store بالشكل التالي:

<?php
public function store(Request $request)
{
  $data = request()->validate([
    "title" => 'required',
    "description" => 'required',
  ]);

  $data['users_id'] = auth()->id();
  Project::create($data);

  return redirect('/projects');

}

 

  • 0
نشر

يبدو أن هناك إختلاف بين الكود المرفق والصور، ربما قام Laravel بحفظ نسخة من ملف index.blade.php في الملفات المؤقتة، ويمكنك تجربة الأمر التالي وإعادة المحاولة:

php artisan view:clear

 

  • 0
نشر
بتاريخ 14 ساعات قال سامح أشرف:

يبدو أن هناك إختلاف بين الكود المرفق والصور، ربما قام Laravel بحفظ نسخة من ملف index.blade.php في الملفات المؤقتة، ويمكنك تجربة الأمر التالي وإعادة المحاولة:


php artisan view:clear

 

لقد قمت بذلك الامر يدويا وغيره

 

بتاريخ 14 ساعات قال عبود سمير:

هناك عدة أخطاء حيث أن projects هو عبارة عن مُتغير يتم تمريره من المتحكم:


$projects = auth()->user()->projects;

في الأخير أنت تنادي على العلاقة projects لكن في النموذج User قمت بتسمية العلاقة ب project لذلك يجب تصحيح ذلك لتُصبح العلاقة:


public function projects()
{
  return $this->hasMany(Project::class);
}

أنت لا تقوم بتحديد ماهو المفتاح الثانوي في العلاقة لذلك يجب أن تحترم العُرف و تقوم بتسميته user_id و ليس users_id و في هذه الحالة لديك طريقتين:

تغيير users_id إلى user_id في كل من ملف التهجير:


$table->foreignId('user_id')->references('id')->on('users')->onDelete('cascade');

تنفيذ أمر التهجير:


php artisan migrate:fresh

ثم تغيير الحقل من users_id إلى user_id في مصفوفة fillable في النموذج Project ثم تغيير التابع store في المتحكم ProjectController ليُصبح:


<?php
public function store(Request $request)
{
  $data = request()->validate([
    "title" => 'required',
    "description" => 'required',
  ]);

  $data['user_id'] = auth()->id();
  Project::create($data);

  return redirect('/projects');

}

و بهذا الشكل ستعمل.

الطريقة الثانية بترك الحقل كما تريد users_id لكن تحتاج إلى تغيير العلاقة بحيث تُحدد المفتاح الثانوي بهذا الشكل:


public function projects()
{
  return $this->hasMany(Project::class, 'users_id');
}

و بطبيعة الحال تجعل الدالة store بالشكل التالي:


<?php
public function store(Request $request)
{
  $data = request()->validate([
    "title" => 'required',
    "description" => 'required',
  ]);

  $data['users_id'] = auth()->id();
  Project::create($data);

  return redirect('/projects');

}

 

شكرا.لا اتبعت العرف والطريقة الاولى. 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...