Model Field Names
July 30, 2007
Sometimes I've needed to get a list of fields that a Model's table has. This is a little function that I have in my AppModel just to make getting the list of fields easy.
<br/>
<br/>Dont forget, if you just want to know about one field, you can use the already builtin Model->hasField($name)
<br/>
<br/><div class="code"><pre><span class="cp"><?php</span>
<span class="k">class</span> <span class="nc">AppModel</span> <span class="k">extends</span> <span class="nx">Model</span> <span class="p">{</span>
<span class="c">/**</span>
<span class="c"> * Get a list of all fields of a the table this model is associated with</span>
<span class="c"> * @param bool, prefix all values with the name of this model eg: Model.fieldname </span>
<span class="c"> * @return array non-associative array with field names as values</span>
<span class="c"> * @author rtconner</span>
<span class="c"> */</span>
<span class="k">function</span> <span class="nf">fieldNames</span><span class="p">(</span><span class="nv">$prefix</span><span class="o">=</span><span class="k">false</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="k">empty</span><span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">_tableInfo</span><span class="p">))</span> <span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">loadInfo</span><span class="p">();</span>
<span class="p">}</span>
<span class="nv">$arr</span> <span class="o">=</span> <span class="nf">array_keys</span><span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">_tableInfo</span><span class="o">-></span><span class="na">combine</span><span class="p">(</span><span class="s1">'{n}.name'</span><span class="p">));</span>
<span class="k">if</span><span class="p">(</span><span class="nv">$prefix</span><span class="p">)</span> <span class="p">{</span>
<span class="nv">$func</span> <span class="o">=</span> <span class="nf">create_function</span><span class="p">(</span><span class="s1">'&$a, $key, &$obj'</span><span class="p">,</span> <span class="s1">'$a = $obj->escapeField($a);'</span><span class="p">);</span>
<span class="nf">array_walk</span><span class="p">(</span><span class="nv">$arr</span><span class="p">,</span> <span class="nv">$func</span><span class="p">,</span> <span class="nv">$this</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nv">$arr</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="cp">?></span><span class="x"></span>
</pre></div>
<div style='display:none'><?php
<br/>class AppModel extends Model {
<br/>
<br/> /**
<br/> * Get a list of all fields of a the table this model is associated with
<br/> * @param bool, prefix all values with the name of this model eg: Model.fieldname
<br/> * @return array non-associative array with field names as values
<br/> * @author rtconner
<br/> */
<br/> function fieldNames($prefix=false) {
<br/> if (empty($this->_tableInfo)) {
<br/> $this->loadInfo();
<br/> }
<br/>
<br/> $arr = array_keys($this->_tableInfo->combine('{n}.name'));
<br/> if($prefix) {
<br/> $func = create_function('&$a, $key, &$obj', '$a = $obj->escapeField($a);');
<br/> array_walk($arr, $func, $this);
<br/> }
<br/> return $arr;
<br/> }
<br/>}
<br/>
<br/>?></div>