@@ -89,18 +89,25 @@ protected function getModelNamespace()
8989 if (null === $ tableMap ) {
9090 return null ;
9191 }
92- $ map = $ tableMap ::getTableMap ();
93- $ className = $ map ?->getClassName();
94- if (is_string ($ className ) && $ className !== '' ) {
95- return $ className ;
96- }
92+
9793 if (method_exists ($ tableMap , 'getOMClass ' )) {
9894 try {
9995 $ legacyClassName = $ tableMap ::getOMClass (false );
100- return is_string ($ legacyClassName ) && $ legacyClassName !== '' ? $ legacyClassName : null ;
96+ if (is_string ($ legacyClassName ) && $ legacyClassName !== '' ) {
97+ return $ legacyClassName ;
98+ }
10199 } catch (\Throwable ) {
102- // Keep null when table map cannot resolve OM class.
100+ // Fall back to table map introspection below.
101+ }
102+ }
103+ try {
104+ $ map = $ tableMap ::getTableMap ();
105+ $ className = $ map ?->getClassName();
106+ if (is_string ($ className ) && $ className !== '' ) {
107+ return $ className ;
103108 }
109+ } catch (\Throwable ) {
110+ // Keep null when table map cannot be resolved in early runtime.
104111 }
105112 return null ;
106113 }
@@ -111,7 +118,22 @@ protected function getModelNamespace()
111118 private function getTableMap ()
112119 {
113120 $ tableMapClass = $ this ->getModelTableMap ();
114- return (null !== $ tableMapClass ) ? $ tableMapClass ::getTableMap () : null ;
121+ if (null === $ tableMapClass ) {
122+ return null ;
123+ }
124+ try {
125+ return $ tableMapClass ::getTableMap ();
126+ } catch (\Throwable ) {
127+ if (method_exists ($ tableMapClass , 'buildTableMap ' )) {
128+ try {
129+ $ tableMapClass ::buildTableMap ();
130+ return $ tableMapClass ::getTableMap ();
131+ } catch (\Throwable ) {
132+ return null ;
133+ }
134+ }
135+ return null ;
136+ }
115137 }
116138
117139 /**
@@ -121,20 +143,30 @@ private function getTableMap()
121143 protected function getPkDbName ()
122144 {
123145 $ tableMap = $ this ->getTableMap ();
146+ $ tableMapClass = is_object ($ tableMap ) ? get_class ($ tableMap ) : '' ;
147+ $ tableName = ($ tableMapClass !== '' && defined ($ tableMapClass . '::TABLE_NAME ' ))
148+ ? (string )constant ($ tableMapClass . '::TABLE_NAME ' )
149+ : '' ;
150+ if ($ tableName === '' ) {
151+ $ tableName = method_exists ($ tableMap , 'getName ' ) ? (string )$ tableMap ->getName () : '' ;
152+ }
153+ if ($ tableName === '' ) {
154+ $ tableName = method_exists ($ tableMap , 'getPhpName ' ) ? (string )$ tableMap ->getPhpName () : '' ;
155+ }
124156 $ pks = $ tableMap ->getPrimaryKeys ();
125157 if (count ($ pks ) === 1 ) {
126158 $ pks = array_keys ($ pks );
127159 return [
128- $ tableMap :: TABLE_NAME . '. ' . $ pks [0 ] => Api::API_MODEL_KEY_FIELD
160+ $ tableName . '. ' . $ pks [0 ] => Api::API_MODEL_KEY_FIELD
129161 ];
130162 }
131163 if (count ($ pks ) > 1 ) {
132164 $ apiPks = [];
133165 $ principal = '' ;
134166 $ sep = 'CONCAT( ' ;
135167 foreach ($ pks as $ pk ) {
136- $ apiPks [$ tableMap :: TABLE_NAME . '. ' . $ pk ->getName ()] = $ pk ->getPhpName ();
137- $ principal .= $ sep . $ tableMap :: TABLE_NAME . '. ' . $ pk ->getName ();
168+ $ apiPks [$ tableName . '. ' . $ pk ->getName ()] = $ pk ->getPhpName ();
169+ $ principal .= $ sep . $ tableName . '. ' . $ pk ->getName ();
138170 $ sep = ', " ' . Api::API_PK_SEPARATOR . '", ' ;
139171 }
140172 $ principal .= ') ' ;
0 commit comments