Retorno de campos especificos com findAll()

3 views
Skip to first unread message

TSassara

unread,
Oct 6, 2007, 4:19:46 PM10/6/07
to Cake PHP Português
Olá galera!

Estou tentando limitar os campos que são retornados quando utilizo o
findAll()
Consigo limitar normalmente os campos retornados de seu modelo,
porem,
não consigo o mesmo para os modelos relacionados.

Exemplo:
Gostaria de ter este resultado:
Array
(
[0] => Array
(
[Post] => Array
(
[id] => 1
[title] => Titulo aqui
)
[Tag] => Array
(
[0] => Array
(
[id] => 1
[tag_name] => Uma tag
)
...


Acho que já lí algo a respeito, porem não encontrei aqui no Grupo.

Será que terei de passar uma query SQL diretamente?

Obrigado.

TSassara

unread,
Oct 6, 2007, 4:30:19 PM10/6/07
to Cake PHP Português
A minha primeira tentativa foi:

$this->set('posts',
$this->Post->findAll(null, array('Post.id', 'Post.titulo',
'Tag.id', 'Tag.tag_name')));

hostdesigner

unread,
Oct 8, 2007, 7:36:35 PM10/8/07
to Cake PHP Português
Ué comigo eu sempre faço

$arrayFields = array( 'Model.campo', 'Model.campo2' );
findAll( $arrayConditions, $arrayFields )

Sempre funcionou.

Falopa!

TSassara

unread,
Oct 8, 2007, 9:27:39 PM10/8/07
to Cake PHP Português
@hostdesigner:

Desta forma, pegaria campos especificos apenas do primeiro modelo,
gostaria de tambem filtrar os campos dos modelos que se relacionam com
o ele.

E desta forma não funciona:

$arrayFields = array( 'Model.campo', 'Model2.campo' );
findAll( $arrayConditions, $arrayFields )

Thiago Paes

unread,
Oct 9, 2007, 1:05:37 PM10/9/07
to cake-...@googlegroups.com
Faz o seguinte, tenta por:

$this->Model->recursive = 0; (tb pode ser 1 ou 2, vai da tua necessidade, testae)

$arrayFields = array( 'Model.campo', 'Model2.campo' );
$lista           = $this->Model->findAll( $arrayConditions, $arrayFields );

acho que isso ajuda...
--
________________________________________________________
Thiago Paes - WebDeveloper - Linux user: #224062
site: http://www.thiagopaes.com.br

eber.f...@gmail.com

unread,
Oct 19, 2007, 6:06:34 PM10/19/07
to Cake PHP Português
Cara, você pode usar o unbindModel, então você poderia fazer algo do
tipo

$this->Post->unbindModel(array('hasMany' => array('Tag')));

Se for assim que você fez sua associação... Ou seja, dentro do
unbindModel você passa exatamente a forma e o modelo que você quer
retirar da associação naquele momento, assim os resultados vão voltar
sem as associações mais básicas...

TSassara

unread,
Oct 21, 2007, 11:14:01 AM10/21/07
to Cake PHP Português
@eber,
O problema não é exatamente retirar um model associado, mas sim,
retornar alguns campos destes Models...

--

Estava testando, e existem alguns tipos de relacionamentos que
podem ser passados para o parametro "$filds" do metodo findAll() o
seguinte:


$arrayFields = array( 'Model.campo', 'Model2.campo' );

Mas não são todos os tipos de relacionamentos.
Como não anotei e não precisei mais, esqueci.

Essa tarde farei os testes e reportarei aqui na lista.


On 19 Out, 20:06, "eber.frei...@gmail.com" <eber.frei...@gmail.com>
wrote:

Reply all
Reply to author
Forward
0 new messages