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

السؤال

نشر

لدي قاعدة بيانات فيها جدولين مرتبطين ببعضهم بعلاقة One-to-Many. وأرغب عند الإضافة على جدول منهم التحقق من السجلات الموافقة لكي أقوم إما بإضافة سجل جديد على قاعدة البيانات أو تحديث السجل الموجود حالياً في حال كان موجوداً.

لدي المودل التالي:

public function option() {
    return $this->hasOne('Marks', 'marks_student_id');
}

public function setOptionArrayAttribute($values)
{
    $this->option->update($values);
}

مثال للكود الذي أرغب بتحقيقه:

$model =Student::find($id);
if (Input::has('marks')) {
    if (<في حال كان السجل المقابل غير موجود أقوم بإضافة سجل جديد>) {
        $option = new Marks(Input::get('option'));
        $option->student()->associate($model);
        $option->save();
        $model->fill(Input::except('option');
    } else {
       $model->update(Input::all());
    }
};

 

Recommended Posts

  • 0
نشر

الطريقة العامة للتأكد من السجلات المرتبطة والمستخدمة من قبل نسخة php 7.2 هي بالتحقق من عدد السجلات:

if (count($model->relation))
{
  // أي يوجد سجلات
}

وأصبح من الممكن أيضاً التحقق إما عن طريق الطريقة السابقة أو باستخدام Eloquent، ففي العلاقات الأحادية مثل: hasOne, belongsTo, morphTo, morphOne يمكن تنفيذ التالي:

// لا يوجد مودل موافق
$model->relation; // null
count($model->relation); // 0 أي false

// يوجد مودل مطابق
$model->relation;
count($model->relation); // 1 أي true

أما في العلاقات المتعددة مثل: hasMany, belongsToMany, morphMany, morphToMany, morphByMany يمكن تنفيذ التالي:

// لا يوجد مجموعة مرتبطة
$model->relation; // المجموعة التي لا تحوي سجلات مرتبطة ستعطي القيمة true
count($model->relation); // 0 أي false

// يوجد سجلات مرتبطة
$model->relation; // المجموعة التي تحوي عنصر واحد أو أكثر ستعطي true أيضاً
count($model->relation);

ففي العلاقات المتعددة يجب الانتباه إلى قيم true لأنه عند وجود مجموعة لديها مجموعة مرتبطة بها حتى ولو كانت هذه المجموعة لا تحوي سجلات ستعطي القيمة true.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...