Ассоциация Cakephp HABTM не работает

#php #cakephp

#php #cakephp

Вопрос:

Мне нужна ассоциация, в которой у терапевтов много детей и наоборот.

У меня есть 3 таблицы:

терапевты дети children_therapists

Вы можете увидеть связь ниже:

Therapist.php

  public $hasAndBelongsToMany = array('Child' =>
                array(
                               'className' => 'Children',
                               'joinTable' => 'children_therapists',
                               'foreignKey' => 'therapist_id',
                               'associationForeignKey' => 'child_id',
                               'unique' => true,
                               'conditions' => '',
                               'fields' => '',
                               'order' => 'Child.last_name',
                               'limit' => '',
                               'offset' => '',
                               'finderQuery' => '',
                               'with' => ''
                           )
    );
 

В Child.php модель, я попробовал этот код:

 public $useTable = 'children';
 

но это не сработало.

Когда я кодирую против нее, я получаю следующую ошибку:

Отсутствует таблица базы данных

Ошибка: дочерние таблицы для дочернего элемента модели не были найдены в источнике данных по умолчанию.

Любая помощь приветствуется.

Спасибо, Грег

Комментарии:

1. Проблема заключается в дочерней модели , а не в дочерней модели. Торт ищет стол для детей (условно бы так и назвали childrens ). Вам нужно установить $useTable = 'children'; внутри дочерней модели.

2. В качестве альтернативы, если дочерние элементы на самом деле не являются моделью, вам необходимо изменить className => Children ассоциацию на дочернюю.

Ответ №1:

Дочерняя модель не используется

Потому что код в вопросе не ссылается на него.

 public $hasAndBelongsToMany = array(
    'Child' => array(
       'className' => 'Children',
//                    ^ Supposed to be a model name
 

Он ссылается на Children модель, которая не существует.

Чтобы выделить значение ключа массива и ключей className, сравните с:

 class User extends AppModel {

    public $hasAndBelongsToMany = array(
        'Friend' => array(
    //  ^ Whatever you want
           'className' => 'Child',
    //                    ^ A model name
 

Простое исправление

Чтобы исправить заданный вопрос, просто замените

 'className' => 'Children'
 

с

 'className' => 'Child'
 

Комментарии:

1. Спасибо за помощь. Когда я меняю имя класса на «Дочерний», я получаю следующую ошибку: Ошибка с фатальной ошибкой: вызов функции-члена schema () в не-объектном файле: /var/www/lib/Cake/Model/Model.php Строка: 3575

2. Тогда есть больше ошибок, чем в вопросе =) — посмотрите на строку кода в вашем приложении и определите, к чему оно пытается получить доступ (т. Е. К Чему $assoc ) и почему это не объект модели.