I have multiple fields setup as FK to the same table. The FK can also be NULL.
I keep getting this error:
ExistsIn rule for 'late_agreement_exception_outcome_recommendation_id' is invalid. 'ExceptionOutcomes' is not associated with 'AppModelTableExceptionsTable'.
Database structure:
exceptions id, request_id, late_agreement_exception_outcome_recommendation_id (FK, exception_outcomes->id) late_agreement_exception_outcome_id (FK, exception_outcomes->id), ... exception_outcomes id, name ...
Column definition (ie. late_agreement_exception_outcome_recommendation_id):
Column relationship (ie. late_agreement_exception_outcome_recommendation_id):
ExceptionTable:
FK setup to ExceptionOutcomes
$this->belongsTo('LateAgreementExceptionOutcomeRecommendations', [ 'class' => 'ExceptionOutcomes', 'foreignKey' => 'late_agreement_exception_outcome_recommendation_id', 'joinType' => 'INNER', ]);
Edited rules attempting to enable entry of a null value for the field value:
$rules->add( function ($entity, $options) { $rule = new ExistsIn('late_agreement_exception_outcome_recommendation_id', 'ExceptionOutcomes'); return $entity->late_agreement_exception_outcome_recommendation_id === NULL || $rule($entity, $options); }, ['errorField' => 'late_agreement_exception_outcome_recommendation_id'] );
Update #1
I changed the association name like so:
$rules->add( function ($entity, $options) { $rule = new ExistsIn('late_agreement_exception_outcome_recommendation_id', 'LateAgreementExceptionOutcomeRecommendations'); return $entity->late_agreement_exception_outcome_recommendation_id === NULL || $rule($entity, $options); }, ['errorField' => 'late_agreement_exception_outcome_recommendation_id'] );
And got the following issue simply saving the data:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'sdi_ips2.late_agreement_exception_outcome_recommendations' doesn't exist
Previously, I could save the column when providing a value. However, trying to revert to NULL would cause an issue.
Update #2
try { $this->Requests->save($request); } catch(CakeDatabaseExceptionDatabaseException $e) { debug("here!"); exit; }
Update #3
Here’s what I see in the SQL log:
Generated Models The following Table objects used CakeORMTable instead of a concrete class: LateAgreementExceptionOutcomeRecommendations
Advertisement
Answer
Solution:
Note the className
attribute in belongsTo
.
$this->belongsTo('LateAgreementExceptionOutcomeRecommendations', [ 'className' => 'ExceptionOutcomes', 'foreignKey' => 'late_agreement_exception_outcome_recommendation_id', 'joinType' => 'INNER', ]);