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

التعامل مع أخطاء phpLaravel

معتز المشكلي

السؤال

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

  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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...