سؤال

أنا جديد على CakePhp وأعمل من خلال كتاب Apress "بدء CakePhp من Novice إلى Professional" ، لكن واجهت مشكلة بعد فصل الخبز.

(إذا رأيت سؤالي الأخير الآخر ، فستعرف أنه كان عليّ تخطي هذا الفصل لأنني لا أستطيع الحصول على وحدة التحكم في Bake على جهاز Win7 الخاص بي).

المشكلة هي أنني لا أعتقد أن جمعيات الجدول تعمل بشكل صحيح بعد الآن ، على الرغم من أنها اعتادت عندما بدأت مثال تطبيق المدونة في بداية الكتاب.

يحتوي مثال المدونة على الجداول التالية:

Users
Posts

نموذج المستخدم: $ hasmany = array ('post') ؛ نموذج البريد: $ elemSto = Array ('User') ؛

أنا أستخدم السقالات حاليًا فقط لاختبار كل شيء ولكن لدي بعض المشاهدات المخصصة وإجراءات ADD () مخصصة لـ Posts_Controller.

المشكلة هي أنه عندما أستخدم إجراء Add () لـ post_controller ، فإن حقل المعرف للمستخدم (من جدول المستخدمين) لا يتم وضعه في حقل مفتاح user_id الخارجية لجدول المنشورات. لذلك ، عندما أعرض المنشور ، يكون جزء "المؤلف" من العرض فارغًا لأنه لا يمكن العثور على المعرف. إذا استخدمت debug($posts) بعد ذلك ، لا تحتوي المصفوفة التي تم إرجاعها على أي معلومات لـ user_id لكل منشور وبالتالي لا توجد معلومات في صفيف "المستخدم".

اعتقدت أن user_id كان الطريقة التقليدية لإضافة ارتباط بين الجداول لـ CakePhP ولكن لا يبدو أنه يعمل.

أي أفكار ما يجب أن أفعله؟

شكرا جزيلا مقدما،

Infiniti Fizz

ملاحظة: آسف للجميع إذا كنت ساحرة لك بمشاكل CakePhP.

PPS

لقد نسيت تقريبًا ، فإن عرض ADD.CTP للوظائف يبدو على النحو التالي:

<div class="posts form">
 <?=$form->create('Post');?>
 <fieldset>
 <legend>Add Post</legend>
 <?
  e($form->input('name'));
  e($form->input('date'));
  e($form->input('content'));
  e($form->input('User'));
 ?>
 </fieldset>
 <?=$form->end('Submit');?>
</div>
<div class="actions">
 <ul>
  <li><?=$html->link(__('List Posts', true),array('action'=>'index'));?></li>
  <li><?=$html->link(__('List Users', true),array('controller','users', 'action'=>'index'));?></li>
  <li><?=$html->link(__('New User', true),array('controller'=>'users', 'action'=>'add'));?></li>
 </ul>
</div>

و Add () الإجراء في posts_controller.php:

function add()
{
   if(!empty($this->data))
   {
    $this->Post->create();
    if($this->Post->save($this->data))
    {
     $this->Session->setFlash('The Post has been saved', true);
     $this->redirect(array('action' => 'index'));
    }
    else
    {
     $this->Session->setFlash('The Post could not be saved. Please try again.', true);
    }
   }
   $users = $this->Post->User->find('list');
   $this->set(compact('users'));
}
هل كانت مفيدة؟

المحلول

أنا أيضًا جديد في الكيك ، لكن بقدر ما أعرف ، أعتقد أنه يجب عليك تغيير هذا في Add.CTP:

$form->input('User')

الى هذا

$form->input('user_id')

يحرص Formhelper على عرض المدخلات على أنها منسدلة (استنادًا إلى مراجع Hasmany-Belongsto).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top