Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola gente
dessa vez eu nao entendi
quando eu faço isso aqui
function incluir()
{
$valor=$this->Categoria->find('all',
array(
'conditions' => array('Categoria.status' => '1'),
'fields' => array('Categoria.id', 'Categoria.categoria'),
'order' => array('Categoria.id ASC')
)
);
debug($valor);
// esse find list e ideal para select passar uma listagem manera :)
// minha condicao procure geral dentro de tabela categoria que tem um status =1:)
}
meu debug fica assim certinho
Array
(
[0] => Array
(
[categoria] => Array
(
[id] => 1
[categoria] => Camisa polo
)
)
[1] => Array
(
[categoria] => Array
(
[id] => 2
[categoria] => camisa listrada
)
)
)
sendo que eu tava vendo no manual que usando list e melhor sendo
pq eu vou pegar esse resultado e colocar dentro de um select
ai eu alterei para list o meu array no debug e vazio
oque eu alterei foi so isso
$valor=$this->Categoria->find('list',
array(
'conditions' => array('Categoria.status' => '1'),
'fields' => array('Categoria.id', 'Categoria.categoria'),
'order' => array('Categoria.id ASC')
)
);
debug($valor);
e meu debug aparece vazio
app\controllers\subcategorias_controller.php (line 48)
Array
(
[] =>
)
e na minha view eu to colocando assim
echo $form->select('categoria',$valor);
a query do debug esta saindo assim
Nr Query Error Affected Num. rows Took (ms)
1 DESCRIBE sub_categorias 3 3 2
2 DESCRIBE categorias 3 3 2
3 SELECT `Categoria`.`id`, `Categoria`.`categoria` FROM `categorias` AS `categoria` WHERE `Categoria`.`status` = 1 ORDER BY `Categoria`.`id` ASC 2 2 1
moral da historia nao esta conseguindo passar os valores para o select :(
alguem tem uma ideia do que eu estou fazendo errado minha tabela
id,categoria,status
ola lucas coloque como você falou e o resultado deu isso aqui
<option value="1">1</option>
<option value="2">2</option>
esse aqui embaixo e a query no meu banco pelo php admin
id categoria status
1 Camisa polo 1
2 camisa listrada 1
coloquei no model como você falou
sendo que eu preciso pegar que tem esta com status 1 :)
a sua dica pegou so os id da categoria e nao chamou a categoria :(
tem como ajudar de novo :(
o meu model esta assim
<?
class Subcategoria extends AppModel {
var $name = "sub_categoria"; //para tornar o script compinatível com php 4
var $belongsTo ='categoria';
var $displayField ="categoria";
}
?>
// essa e a query que esta sendo usada
DESCRIBE sub_categorias 3 3 2
2 DESCRIBE categorias 3 3 2
3 SELECT categoria.id FROM categorias AS categoria WHERE 1 = 1 2 2 1
um abraço
Só ficou os ID's, porque o $displayField não funcionou. Simples de resolver, você colocou o atributo no model errado, você deveria ter colocado em Categoria (pois a coluna "categoria" - do displayField - refere-se a coluna da sua tabela "categorias.categoria"). Teste ae.
Tabela
Coluna
Ola bom dia lucas falha nossa ^_^
lembra que eu tinha comentando com você sobre procura com status =1
eu conseguir montar a solucao
o code ficar assim
<?function incluir($id=NULL)
{
pr($this->data);
$valor=$this->Categoria->find('list',
array(
'conditions' => array('Categoria.status' => '1')
)
);
// aqui eu faço o select dentro de categoria buscando dentro da categoria quem tem o status =1
//rodou certinho :)
$this->set('valor',$valor);
if (!empty($this->data)) {
$this->SubCategoria->save($this->data)
// aqui era para salvar or die("deu erro aqui");
}
}
?>
sendo que nao esta salvando :o
sabe aquele debug que eu coloque ele retornar isso aqui ele me retornar isso aqui
Array
(
[subcategorias] => Array
(
[sub_categoria] => vamos ver
[id] =>
[categoria_id] => 1
)
)
minha view esta assim
<?
// Incluir o jQuery ao projeto
// Neste exemplo estou importando a jquery
// O segundo parâmetro (false) é para indicar que vai no <head> e não no local onde está sendo executado
//Com isso, você faz que o código javascript vá para o <head> do seu HTML eecho $javascript->link( 'jquery' , false );
echo $javascript->link( 'funcao' , false );
echo $html->css('alerta',false);
?>
<h1> Cadastre sua Nova Sub Categoria</h1>
<?php
//($valor);
// $categoria_select[]=> $valor["categoria"]["id"];
// $categoria_select[]=> $valor["categoria"]["categoria"];
// Para onde o formulário submeterá
$para = array('controller' => 'subcategorias', 'action' => 'incluir');
echo $form->create('subcategorias', array('url' => $para));
echo $form->input('sub_categoria');
echo $form->input('id', array('type'=>'hidden'));
// echo $form->input('categoria_id',$valor,'empty' =>'coloque a categoria ');
//echo $form->input('Categoria', array('options' => $valor, 'empty' => 'escolha uma Categoria'));
echo $form->select('categoria_id',$valor,'','','escolha uma categoria');
?>
<?
echo '<br/><br/>';
echo '<input type="submit" id="enviar" value="cadastrar subcategoria"/> </form>';
?>
pelo que eu pesquisei na web nao existe outra manera de salvar usando cake sem usar o save
deixa vez aonde eu errei :(
//minha tabela e assim
TABLE sub_categorias` (
id int(11) NOT NULL AUTO_INCREMENT,
categoria_id int(11) DEFAULT NULL,
sub_categoria varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
e os name que estao no form e igual da tabela :)
tem uma ideia do pq do erro ?
Existem sim outras maneiras para salvar, porém, estas maneiras, são para situações especificas.
Bom, no seu caso, o problema parece ser que nos dados estão vindo o $this->data['SubCategoria']['id'], e o Cake vai entender que deve atualizar e não salvar.
Portanto, tente retirar o input id da view e veja se da tudo certo.
>
Existem sim outras maneiras para salvar, porém, estas maneiras, são para situações especificas.
Bom, no seu caso, o problema parece ser que nos dados estão vindo o $this->data['SubCategoria']['id'], e o Cake vai entender que deve atualizar e não salvar.
Portanto, tente retirar o input id da view e veja se da tudo certo.
ola lucas fiz como você falou tirei o id la vazio
esse foi o result que deu
Array
(
[subcategorias] => Array
(
[sub_categoria] => vamos ver agora sem o id
[categoria_id] => 1
)
)
ólha como ficou a view
<?
// Incluir o jQuery ao projeto
// Neste exemplo estou importando a jquery
// O segundo parâmetro (false) é para indicar que vai no <head> e não no local onde está sendo executado
//Com isso, você faz que o código javascript vá para o <head> do seu HTML eecho $javascript->link( 'jquery' , false );
echo $javascript->link( 'funcao' , false );
echo $html->css('alerta',false);
?>
<h1> Cadastre sua Nova Sub Categoria</h1>
<?php
//($valor);
// $categoria_select[]=> $valor["categoria"]["id"];
// $categoria_select[]=> $valor["categoria"]["categoria"];
// Para onde o formulário submeterá
$para = array('controller' => 'subcategorias', 'action' => 'incluir');
echo $form->create('subcategorias', array('url' => $para));
echo $form->input('sub_categoria');
//echo $form->input('id', array('type'=>'hidden'));
// echo $form->input('categoria_id',$valor,'empty' =>'coloque a categoria ');
//echo $form->input('Categoria', array('options' => $valor, 'empty' => 'escolha uma Categoria'));
echo $form->select('categoria_id',$valor,'','','escolha uma categoria');
// foreach($valor as $valor) {
//cho '<option value="'.$valor["categoria"]["id"].'">'.$valor["categoria"]["categoria"].'</option>';
// }
?>
<?
//echo $form->input('Categoria.status', array('type'=>'hidden'));
//$status=$this->data["Categoria"]["status"];
//cho $form->radio('status',$options);
echo '<br/><br/>';
//echo $form->input('Upload de Fotos', array('type' => 'file'));
//echo $form->input('cnm_candidato', array('label' => 'nome', 'class' => 'minha-class', 'id' => 'oque-eu-quizer'));
//echo $form->end('Editar Categoria',array('label' => 'nome', 'class' => 'minha-class', 'id' => 'oque-eu-quizer'));
echo '<input type="submit" id="enviar" value="cadastrar subcategoria"/> </form>';
?>
sinistro :(
nao deu insert no banco
Agora que eu fui ver que você está criando o form incorretamente.
Você deve colocar:
$form->create('NomeDoModel');Então, no seu caso:
$form->create('SubCategoria');
>
Agora que eu fui ver que você está criando o form incorretamente.
Você deve colocar:
$form->create('NomeDoModel');Então, no seu caso:
$form->create('SubCategoria');
ola lucas bom dia eu ja vou testar aqui
meu velho eu virei a noite tentando descobrir
apesar que eu ja ia usa o metodo free style :)
insert into vai na subcategoria pq o cake nao topa :)
ola lucas boa noite
desculpe a demora na reposta
funfou certinho :)
sendo que eu tive add uma nova funcao ADD
para dar o insert
nem a paulada ela topa no incluir
obrigado pelo apoio :)
http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Coloque apenas find('list'), talvés alguma condição esteja impedindo o retorno dos resultados:
$this->Categoria->find('list');
Em seu model, algo que você pode utilizar para deixar um código mais limpo no controller, é utilizar a propriedade Model::$displayField.
Isso dirá ao Cake qual campo ele deve utilizar para o label dos selects, checkboxes etc. (o texto que o usuário verá).
No seu caso, crieo que seja a coluna "categoria".
class Categoria extends AppModel{
}Isso é apenas por boa prática, não é requirido.